2015-10-27 6 views
5

я хочу сделать Laravel валидатор, который проверяет поля внутри маркированного имени массива (0,1,2,3), который находится внутри массиваLaravel валидатор с групповым символом

так что мой массив подобен

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 * 
    ]); 

ответ

5

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 применить набор правил для каждого элемента в массиве элементов.

$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

выглядит как новый laravel (5.2) добавил мое предложение: D – AlhasanIQ

+0

@AlhasanIQ yep и приятно иметь возможность устанавливать все правила в одном месте. Я обновлю свой ответ – andrewtweber

0

Вы могли бы просто сделать что-то вроде этого:

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

Это работает, но Laravel уже есть 'each' метод, который выполняет то же самое, так почему бы повторно -Возвратить колесо? – andrewtweber

+0

Конечно? http://laravel.com/docs/5.1/validation#available-validation-rules Я не могу найти его в документах. –

+0

не все документировано. Это в источнике, см. Ссылку в моем ответе – andrewtweber

Смежные вопросы