Мой сценарий ajax посылает массив следующим образом: Этот массив принадлежит Input::get('questions')
Array ( [0] => Array ( [name] => fields[] [value] => test1 ) [1] => Array ( [name] => fields[] [value] => test2 ) )
В html-части пользователь может добавить несколько fields
.
Не могли бы вы мне помочь? Мне нужно что-то вроде этого:
$inputs = array( 'fields' => Input::get('questions') ); $rules = array( 'fields' => 'required' ); $validator = Validator::make($inputs,$rules); if($validator -> fails()){ print_r($validator -> messages() ->all()); }else{ return 'success'; }
Просто: проверяйте каждый question
отдельно, используя для каждого:
// First, your 'question' input var is already an array, so just get it $questions = Input::get('questions'); // Define the rules for *each* question $rules = [ 'fields' => 'required' ]; // Iterate and validate each question foreach ($questions as $question) { $validator = Validator::make( $question, $rules ); if ($validator->fails()) return $validator->messages()->all(); } return 'success';
Пользовательская валидация Laravel для элементов массива
Откройте следующий файл
/resources/lang/en/validation.php
Затем добавьте пользовательское сообщение
'numericarray' => 'The :attribute must be numeric array value.', 'requiredarray' => 'The :attribute must required all element.',
Чтобы открыть другой файл
/app/Providers/AppServiceProvider.php
Теперь замените код функции загрузки, используя следующий код.
public function boot() { // it is for integer type array checking. $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters) { foreach ($value as $v) { if (!is_int($v)) { return false; } } return true; }); // it is for integer type element required. $this->app['validator']->extend('requiredarray', function ($attribute, $value, $parameters) { foreach ($value as $v) { if(empty($v)){ return false; } } return true; }); }
Теперь можно использовать requiredarray для элемента массива. А также используйте numericarray для проверки целочисленного типа элемента массива.
$this->validate($request, [ 'arrayName1' => 'requiredarray', 'arrayName2' => 'numericarray' ]);