【问题标题】:Laravel validator with a wildcard带有通配符的 Laravel 验证器
【发布时间】:2016-01-26 21:51:19
【问题描述】:

我想制作一个 laravel 验证器来验证数组中未命名数组 (0,1,2,3) 中的字段

所以我的数组就像

array [ //the form data
  "items" => array:2 [ //the main array i want to validate
    0 => array:2 [ // the inner array that i want to validate its data
      "id" => "1"
      "quantity" => "1000"
     ]
    1 => array:2 [
     "id" => "1"
     "quantity" => "1000"
     ]
  // other fields of the form,
  ]

]

所以我想要的是类似的东西

  $validator = Validator::make($request->all(), [
     'items.*.id' => 'required' //notice the star *
  ]);

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.1


    【解决方案1】:

    你可以简单地做这样的事情:

        $rules = [];
        for($i = 0; $i < 10; $i++) {
            $rules["items.$i.id"] = "required";
        }
        $validator = \Validator::make($request->all(), $rules);
    

    【讨论】:

    • 这行得通,但是 Laravel 已经有一个 each 方法可以完成同样的事情,那么为什么要重新发明轮子呢?
    • 确定吗? laravel.com/docs/5.1/validation#available-validation-rules我在文档中找不到。
    • 并非所有内容都记录在案。它在源代码中,请参阅我的答案中的链接
    【解决方案2】:

    Laravel 5.2

    现在支持问题中的语法

    http://laravel.com/docs/master/validation#validating-arrays

    Laravel 5.1

    首先使用所有其他规则创建验证器。对项目使用array 规则

    $validator = Validator::make($request->all(), [
        'items' => 'array',
        // your other rules here
    ]);
    

    然后使用 Validator each 方法将一组规则应用于 items 数组中的每个项目。

    $validator->each('items', [
        'id'       => 'required',
        'quantity' => 'min:0', 
    ]);
    

    这将自动为您设置这些规则...

    items.*.id       => required
    items.*.quantity => min:0
    

    https://github.com/laravel/framework/blob/5.1/src/Illuminate/Validation/Validator.php#L261

    【讨论】:

    • 太棒了!不知道那件事。绝对应该包含在文档中!
    • 看起来像新的 laravel ( 5.2 ) 添加了我的建议:D
    • @AlhasanIQ 是的,很高兴能够在一个地方设置所有规则。我会更新我的答案
    • 知道如何为这些项目指定自定义消息。*.* 规则吗?
    • @James 它应该与常规消息相同:'items.*.id.required' =&gt; 'Item ID is required'。我不相信有任何方法(内置)来引用消息中的 * 键,如果这就是你的意思的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多