2017-02-15 10 views
10

Я пытаюсь проверить POST массив в Laravel:Как проверить массив в Laravel?

$validator = Validator::make($request->all(), [ 
      "name.*" => 'required|distinct|min:3', 
      "amount.*" => 'required|integer|min:1', 
      "description.*" => "required|string" 

     ]); 

Я посылаю пустой POST и получить это if ($validator->fails()) {} в False. Это означает, что проверка правильна, но это не так.

Как проверить массив в Laravel? Когда я отправлю форму с input name="name[]"

ответ

30

Символ звездочки (*) означает, что вы хотите проверить значения VALUES в массиве, а не фактический массив.

$validator = Validator::make($request->all(), [ 
      "name" => 'required|array|min:3', 
      "name.*" => 'required|string|distinct|min:3', 
     ]); 

В приведенном выше примере:

  • Имя должно быть массивом с минимумом 3 элементов.
  • Значения в массиве «имя» должны быть разными (уникальными) строками, длиной не менее 3 символов.
1

Вы должны петлю над входной массив и добавить правила для каждого входа, как описано здесь: Loop Over Rules

Вот некоторый код для уа:

$input = Request::all(); 
$rules = []; 

foreach($input['name'] as $key => $val) 
{ 
    $rules['name.'.$key] = 'required|distinct|min:3'; 
} 

$rules['amount'] = 'required|integer|min:1'; 
$rules['description'] = 'required|string'; 

$validator = Validator::make($input, $rules); 

//Now check validation: 
if ($validator->fails()) 
{ 
    /* do something */ 
} 
+2

Там нет необходимости делать что - https://laravel.com/docs/5.4/validation#validating-arrays – Laran

+0

Ах, я вижу. Спасибо, сэр. –

0

У меня есть этот массив как мой запрос данных из сетки данных HTML + Vue.js/таблицы:

[0] => Array 
    (
     [item_id] => 1 
     [item_no] => 3123 
     [size] => 3e 
    ) 
[1] => Array 
    (
     [item_id] => 2 
     [item_no] => 7688 
     [size] => 5b 
    ) 

и использовать это, чтобы проверить, какие работает правильно:

$this->validate($request, [ '*.item_id' => 'required|integer', '*.item_no' => 'required|integer', '*.size' => 'required|max:191', ]);