Проверить массив входов в форме в Laravel 5.7

Моя форма имеет одно и то же поле ввода несколько раз. Мое поле формы выглядит следующим образом:

<input type='text' name='items[]'>
<input type='text' name='items[]'>
<input type='text' name='items[]'>

И запрос содержит ($ request [‘items’):

array:1 [▼
"items" => array:3 [▼
0 => "item one"1 => "item two"2 => "item three"]
]

Я хочу, чтобы хотя бы один из пунктов был заполнен. Моя текущая проверка в контроллере

    $validator = Validator::make($request->all(),[
'items.*' => 'required|array|size:1'
]);

Это не работает. Я пытался с комбинацией размера, требуется, обнуляемый. Ничего не работает

0

Решение

Просто сделайте это как обычно:

 $validator = Validator::make($request->all(),[
'items' => 'required'
]);
0

Другие решения

Вы можете проверить это так:

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

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

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

Вы должны попробовать это:

$validator = $request->validate([
"items"    => "required|array|min:3",
"items.*"  => "required|string|distinct|min:3",
]);
0

Вы можете использовать пользовательское правило с закрытием.

https://laravel.com/docs/5.7/validation#custom-validation-rules

Чтобы проверить, имеет ли массив все нулевые значения, проверьте его с помощью array_filter, который возвращает false, если все они нулевые.

Так что-то вроде …

  $request->validate([

'items' => [
// $attribute = 'items', $value = items array, $fail = error message as string
function($attribute, $value, $fail) {
if (!array_filter($value)) {
$fail($attribute.' is empty.');
}
},
]
]);

Это установит сообщение об ошибке: ‘items is empty. «

0

На самом деле, достаточно использовать:

$validator = Validator::make($request->all(),[
'items' => 'required|array'
]);

Изменения сделаны:

  • использование items вместо items.* — вы хотите установить правило общих предметов, если вы используете items.* это означает, что вы применяете правило к каждому отправляемому элементу массива отдельно
  • удален size:1 потому что это будет означать, что вы хотите отправить ровно один элемент (и вам нужен хотя бы один). Вам это вообще не нужно, потому что у вас есть required править. Ты можешь читать документация для требуемого правила и вы можете прочитать там, что пустой массив будет required Правило потерпит неудачу, так что это required Правило для массива делает этот массив должен иметь как минимум 1 элемент, так что вам не нужно min:1 или же size:1 совсем
0

Зная, что вы используете последнюю версию Laravel, я действительно рекомендую изучить Функция запроса формы. Таким образом, вы можете отделить проверку от вашего контроллера, сохраняя его намного чище.

В любом случае, как подсказал мне ответ выше, для вас должно быть достаточно:

'items' => 'required|array'
0
По вопросам рекламы [email protected]