【问题标题】:Laravel array validation nullifying valuesLaravel 数组验证无效值
【发布时间】: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


【解决方案1】:

根据我的建议,在使用json_decode 时,您可以通过将true 作为第二个参数传递来强制将JSON 字符串作为关联数组返回。您正在尝试运行为对象上的数组构建的验证标志。

注意:toArray 不会将您的 JSON 转换为数组或对象,它只是将从对象 ($request->my_input) 传递的所有属性转换为 assoc 数组。

【讨论】:

    【解决方案2】:

    作为“不好的建议”。您可以在Validator::make(... 之前调用$request->toArray()(并将数据保存在某个变量中)。

    【讨论】:

    • 这对输出没有任何影响。
    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2021-09-12
    • 2021-12-24
    • 2020-07-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多