My ajax script send array like this: This array belong to Input::get('questions')
Array ( [0] => Array ( [name] => fields[] [value] => test1 ) [1] => Array ( [name] => fields[] [value] => test2 ) )
In html part user can add multiple fields
.
Could you help me with I need something like this:
$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'; }
Simple: validate each question
separately using a for-each:
// 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 Custom Validation for Array Elements
Open the following file
/resources/lang/en/validation.php
Then custom message add
'numericarray' => 'The :attribute must be numeric array value.', 'requiredarray' => 'The :attribute must required all element.',
So that, open the another file
/app/Providers/AppServiceProvider.php
Now replace the boot function code by using following code.
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; }); }
Now can use requiredarray for array element required. And also use the numericarray for array element integer type checking.
$this->validate($request, [ 'arrayName1' => 'requiredarray', 'arrayName2' => 'numericarray' ]);