带有通配符的Laravel验证器

时间:2015-10-27 13:03:47

标签: php laravel laravel-5 laravel-5.1

我想制作一个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 *
  ]);

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

你可以做一些类似的事情:

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