Volatil3
Volatil3

Reputation: 14978

How to validate an Input Array field in Laravel 5.1?

How can I write rule for input field like below:

{!! Form::number("amount[]",null,['min' => 0, 'class' => 'form-control col-xs-2 ']) !!}

I tried following which gave error: htmlentities() expects parameter 1 to be string, array given

        $rules = array(
            'amount[]' => 'required'
        );
        $this->validate($request, $rules);

Update:

I tried this as suggested by a user, it's not redirecting it on page again. Below is controller method:

public function postEstimate(Request $request) {
        $rules = array(
            'amount' => 'required|array'
        );

        $this->validate($request, $rules);
    }

Upvotes: 1

Views: 4706

Answers (4)

Majbah Habib
Majbah Habib

Reputation: 8558

For custom rules implementation of integer type value check of an array

firstly open the following file

/resources/lang/en/validation.php

Then add the custom message

'numericarray'         => 'The :attribute must be numeric array value.',
'requiredarray'        => 'The :attribute must required all element.',

Again open the another file

/app/Providers/AppServiceProvider.php

Now add custom validation code in the boot function.

public function boot()
{

    $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if (!is_int($v)) {
                return false;
            }
        }
        return true;
    });

   $this->app['validator']->extend('requiredarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if(empty($v)){
                return false;
            }
        }
        return true;
    });

}

Now you can use the requiredarray for all element required of array. And also use the numericarray for integer type value check of array

$this->validate($request, [
            'field_name1' => 'requiredarray',
            'field_name2' => 'numericarray'
        ]);

Upvotes: 1

Gal Sisso
Gal Sisso

Reputation: 1959

I guess you got issues with what I explained so this is what I meant -

$rules = [];
$count_amounts = count($request->input('amount'));
foreach (range(0, $count_amounts) as $number) {
    $rules['amount.' . $number] = 'required|integer|min:0';
}

This should check that each amount input you have is an integer and is bigger than 0 (like you defined in the html validation)

Upvotes: 3

Shapi
Shapi

Reputation: 5593

Instead try this:

private  $rules = array(
            'amount' => 'required|array',
        );

public function postEstimate(Request $request) {


        $this->validate($request, $this->rules);
    }

or, try a validation with a 'amount' => 'required

im not sure about this 'amount' => 'required|array

Upvotes: 1

Kalhan.Toress
Kalhan.Toress

Reputation: 21901

if you expect amount as an array the rules should be

$rules = array(
    'amount' => 'required|array'
);

check the doc

If your not redirecting or getting a validation error means there is no validation error

just dd($request->input('amount')) in the controller and check its a array or not if it's a array then validations will pass.

Upvotes: 0

Related Questions