【发布时间】:2019-08-08 19:51:40
【问题描述】:
我想验证 Laravel 中通过来自客户端的请求(编码)的对象数组的值。
首先,我解码通过请求传递的值,然后验证它是否为空。
这是我的代码
$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() 或$request->toArray() 时,验证完成后,我得到的值如下
如果我在验证发生之前返回它,我会收到这样的响应
如何解决此问题并验证项目?
【问题讨论】:
-
你试过
['required', 'string']验证规则吗? -
@thefallen 试过了。还是一样的问题:(
-
您的输入不是数组,而是 JSON 字符串。我不确定 Laravel 默认将 JSON 字符串转换为数组,然后运行验证,但这是你的问题。
-
@Script47 但我将它编码为一个数组。即使它不是数组,验证器也应该返回错误消息。
-
@Conor 如果你做了
return json_decode($arr, true);,它有用吗?
标签: php laravel validation