Как проверить массив в Laravel?


Я пытаюсь проверить сообщение массива в Laravel:

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

        ]);

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

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

Author: Jeff Puckett, 2017-02-15

3 answers

Символ звездочки (*) означает, что вы хотите проверить ЗНАЧЕНИЯ в массиве, а не фактический массив.

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

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

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

РЕДАКТИРОВАТЬ: Начиная с Laravel 5.5 вы можете вызывать метод validate() непосредственно по объекту запроса, например:

$data = $request->validate([
    "name"    => "required|array|min:3",
    "name.*"  => "required|string|distinct|min:3",
]);
 83
Author: Laran, 2018-03-25 14:33:58

У меня есть этот массив в качестве данных моего запроса из 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',
]);
 5
Author: Nisal Gunawardana, 2018-05-08 07:22:37

Вам нужно выполнить цикл по входному массиву и добавить правила для каждого ввода, как описано здесь: Цикл по правилам

Вот немного кода для вас:

$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 */ 
}
 1
Author: Chad Fisher, 2017-02-15 19:47:43