Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel validator with a wildcard

i want to make a laravel validator that validates the the fields inside an un-named array ( 0,1,2,3 ) that is inside an array

so my array is like

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,
  ]

]

so what i want is something like

  $validator = Validator::make($request->all(), [
     'items.*.id' => 'required' //notice the star *
  ]);
like image 981
AlhasanIQ Avatar asked Oct 27 '15 13:10

AlhasanIQ


2 Answers

Laravel 5.2

The syntax in the question is now supported

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

Laravel 5.1

First create the validator with all of your other rules. Use the array rule for items

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

Then use the Validator each method to apply a set of rules to every item in the items array.

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

This will automatically set these rules for you...

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

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

like image 135
andrewtweber Avatar answered Oct 21 '22 20:10

andrewtweber


You could simply do something like that:

    $rules = [];
    for($i = 0; $i < 10; $i++) {
        $rules["items.$i.id"] = "required";
    }
    $validator = \Validator::make($request->all(), $rules);
like image 39
shock_gone_wild Avatar answered Oct 21 '22 20:10

shock_gone_wild