Как проверить массив в 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[]"
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",
]);
У меня есть этот массив в качестве данных моего запроса из 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',
]);
Вам нужно выполнить цикл по входному массиву и добавить правила для каждого ввода, как описано здесь: Цикл по правилам
Вот немного кода для вас:
$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 */
}