2015-04-22 4 views
1

У меня есть форма с 5 списками выпадающих списков с несколькими вариантами выбора. При отправке, я пытаюсь выполнить некоторую проверку, чтобы проверить, что хотя бы один элемент был проверен.Как проверить, пуст ли массив?

Код в моем контроллере;

$input = Request::except('postcode_id'); //all user input from the form 

$validator = \Validator::make(
    [ 
     $input => 'required' 
    ] 
); 

if ($validator->fails()) 
{ 
    print "failed"; 
}else{ 
    print "passed"; 
} 

Ошибка, которую я получаю; Illegal offset type. Я думаю, мне, возможно, понадобится выполнить специальный валидатор, но сначала я хочу проверить, если есть более простой способ.

+0

Если я не ошибаюсь, должно ли имя поля быть ключом массива make? Я имею в виду ''field_name' => 'required''? –

ответ

2

Первый аргумент Validator::make() - это данные, а второй - это массив правил проверки, которые индексируются именами ввода. Вы можете использовать required_without_all для подтверждения того, что по крайней мере один должен присутствовать, но это немного многословно:

$validator = \Validator::make($input, [ 
    'dropdown_1' => 'required_without_all:dropdown_2,dropdown_3,dropdown_4,dropdown_5' 
    'dropdown_2' => 'required_without_all:dropdown_1,dropdown_3,dropdown_4,dropdown_5' 
    'dropdown_3' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5' 
    'dropdown_4' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5' 
    'dropdown_5' => 'required_without_all:dropdown_1,dropdown_2,dropdown_3,dropdown_4' 
]); 

Или написать код для создания $rules массива:

$fields = ['dropdown_1', 'dropdown_2', 'dropdown_3', 'dropdown_4', 'dropdown_5']; 
$rules = []; 
foreach ($fields as $i => $field) { 
    $rules[$field] = 'required_without_all:' . implode(',', array_except($fields, $i)); 
} 
$validator = \Validator::make($input, $rules); 
+0

Я собирался спросить о 'required_without_all', а затем вы отредактировали. Хороший ответ. Может быть, немного странно, если я начну добавлять все больше и больше полей. – mikelovelyuk

+0

Я добавил некоторый код генерации, который сделает его менее «неудобным» :) –

0

Вы должны использовать строки в вашем валидаторе, а не в переменных. Попробуйте это вместо этого.

$validator = \Validator::make(
    [ 
     'input' => 'required' 
    ] 
); 

Пользовательский валидатор сам по себе не слишком сложный. Я использую его все время для проверки ввода массива. В Laravel 5 Request Я сделаю что-то подобное

+0

Ваш второй фрагмент кода действительно не решает конкретной проблемы в вопросе. Я предлагаю вам либо сделать его более конкретным для вопроса, либо сделать его более общим, например. чтобы показать, как работают обычные валидаторы в целом. –

+0

Большое спасибо Jeroen! Я бы сделал более конкретный пример, если бы была подробная информация о том, какие поля форм мы имеем в виду. Ваш собственный ответ тоже объясняет это. –

+0

Действительно, вопрос был не столь ясен. Я должен был прочитать это несколько раз, прежде чем понять ситуацию;) –

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