I have a form with a series of numbers in an array:
<input type="number" name="items[{{ $sku }}]" min="0" /> <input type="number" name="items[{{ $sku }}]" min="0" /> <input type="number" name="items[{{ $sku }}]" min="0" />
I would like to validate that there is at least one of those input fields that has a value.
I tried the following in my OrderCreateRequest, yet the test is passing:
return [ 'items' => 'required|array|min:1' ];
Am I missing something?
Advertisement
Answer
I think you need a custom validation rule like the following because min is not for the elements of the array.
Validator::extend('check_array', function ($attribute, $value, $parameters, $validator) { return count(array_filter($value, function($var) use ($parameters) { return ( $var && $var >= $parameters[0]); })); });
You can create ValidatorServiceProvider and you can add these lines to boot method of ValidatorServiceProvider. Then you need to add Provider to your providers array in config/app.php.
AppProvidersValidatorServiceProvider::class,
Or you just add them top of the action of your controller.
At the end you can use it like this in your validation rules.
'items' => 'check_array:1',
Note: if I understand you correctly it works.