我想验证Laravel中对象数组的值,该对象是我通过客户端的请求传递的(已编码)。
首先,我解码通过请求传递的值,然后进行验证以检查其是否为空。
这是我的代码
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<img src="https://upload.wikimedia.org/wikipedia/commons/f/f8/Windows_logo_-_2012_%28red%29.svg" alt="Microsoft" width="350" />
出乎意料的是,服务器未返回任何错误消息。当我返回$request->request->set('shopping_list', array_map(function ($arr) {
return json_decode($arr);
}, $request->shopping));
$validator = Validator::make($request->toArray(), [
'shopping_list' => ['required'],
'shopping_list.*' => ['required'],
'shopping_list.*.store' => ['required'],
'shopping_list.*.item' => ['required'],
'shopping_list.*.quantity' => ['required'],
'shopping_list.*.brand' => ['required'],
'shopping_list.*.size' => ['required'],
]);
if (count($validator->errors()) > 0) {
return Response::json($validator->errors()->first(), 422);
}
或$request->all()
时,完成验证后,我得到的值如下
如果我在验证之前将其返回,我将收到这样的响应
如何解决此问题并验证项目?
答案 0 :(得分:1)
根据我的建议,当使用json_decode
时,可以通过传递true
作为第二个参数来强制将JSON字符串作为关联数组返回。您正在尝试运行为对象上的数组构建的验证标志。
注意::toArray
不会将JSON转换为数组或对象,而只是将从对象($request->my_input
)传递的所有属性转换为assoc数组。
答案 1 :(得分:0)
作为“不好的建议”。您可以在$request->toArray()
之前调用Validator::make(...
(并将数据保存在某个变量中)。