Laravel 验证对象数组问题
Posted
技术标签:
【中文标题】Laravel 验证对象数组问题【英文标题】:Laravel validate array of objects issue 【发布时间】: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.stringify
ed 字段的 FormData。该字段包含数组。由于它是 JSON php 将其视为字符串,因此我不得不寻找解决方法
有什么特别的原因吗?为什么不直接发送一个 json 请求呢?
你有一个对象数组,因为 json_decode 返回一个对象。要让它返回一个关联数组,您需要执行json_decode($item, true)
。试试看是否可行。
【参考方案1】:
你有一个对象数组,因为json_decode
返回一个对象。要让它返回一个关联数组,您需要执行json_decode($item, true)
。你需要这样做,因为 Laravel 验证器需要数据和验证规则都是数组。由于您传递了一个对象数组,因此它不起作用。
【讨论】:
以上是关于Laravel 验证对象数组问题的主要内容,如果未能解决你的问题,请参考以下文章