Как проверить, пуст ли массив?

У меня есть форма с 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 . Я думаю, мне, возможно, понадобится выполнить специальный валидатор, но сначала я хочу проверить, если есть более простой способ.

Первый аргумент 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); 

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

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

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

 public function __construct() { Validator::extend("pcc", function($attribute, $value, $parameters) { $rules = [ 'container_id' => 'exists:containers,id' ]; foreach ($value as $containerId) { $data = [ 'container_id' => $containerId ]; $validator = Validator::make($data, $rules); if ($validator->fails()) { return false; } } return true; }); } public function rules() { return [ 'containers' => 'required|pcc', ]; }