【发布时间】:2019-02-08 21:22:16
【问题描述】:
我有一个请求,我在其中传递了一组 JSON 对象。它具有以下结构
[ {path: 'string', class: 'string'} ]
据我所知,没有简单的方法来检查这个数组,所以我尝试了下一个
$validatedData = $request->validated();
$result = ['data' => []];
foreach ($validatedData['items'] as $item) {
$result['data'][] = json_decode($item);
}
Validator::make($result, [
'data.*.path' => 'required|url',
'data.*.class' => 'required|string'
])->validate();
但是结果
array(1) {
["data"]=>
array(2) {
[0]=>
object(stdClass)#813 (2) {
["link"]=>
NULL
["class"]=>
NULL
}
[1]=>
object(stdClass)#814 (2) {
["link"]=>
NULL
["class"]=>
NULL
}
}
}
验证器以某种方式切断了数据。当我尝试不使用 Validator::make 部分时,它工作正常,但是我需要控制我检索的内容。
【问题讨论】:
-
试一下
$result = []; -
为什么不能验证 JSON 输入?我对你的问题以及为什么你必须解码 JSON 并构建一个结果数组开始感到有点困惑。您是否在非 json 请求中发送 JSON?
-
我正在发送一个带有
JSON.stringifyed 字段的 FormData。该字段包含数组。由于它是 JSON PHP 将其视为字符串,因此我不得不寻找解决方法 -
有什么特别的原因吗?为什么不直接发送一个 json 请求呢?
-
你有一个对象数组,因为 json_decode 返回一个对象。要让它返回一个关联数组,您需要执行
json_decode($item, true)。试试看是否可行。
标签: php json laravel validation dingo-api