5
votes

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';
                }
2

2 Answers

3
votes

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';
0
votes

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'
        ]);