Laravel's exclude_unless,field,value
rule doesn't seem to work in the instance where field
is an array of values and value
is contained within the field
array.
Given the following:
$validator = Validator::make($request->all(), [
'some_array' => 'array',
'some_field' => 'exclude_unless:some_array,foo|alpha_num',
]);
Where some_array
is equal to ['foo']
, the validator will fail to exclude some_field
. This seems to be because the comparison that lies beneath excludes_unless
is in_array(['foo'], ['foo'])
which returns false
.
Is it possible to achieve the same logic of exclude_unless
— excluding a field from validation if another field equals a certain value, but where the field being compared against is an array and we're checking that the value is in that array?
CodePudding user response:
As long as you're using Laravel 8.55 or above, you could use Rule::when()
:
use Illuminate\Validation\Rule;
$someArray = $request->input('some_array', []);
$validator = Validator::make($request->all(), [
'some_array' => 'array',
'some_field' => Rule::when(!empty(array_intersect(['foo'], $someArray)), ['exclude']),
]);
CodePudding user response:
A closure with a custom rule is what you need:
$validator = Validator::make($request->all(), [
'some_array' => 'array',
'some_field' => [
function($key, $val, $fail) use (&$request) {
if (array_search('foo', $request->some_array) === false) {
$request->remove('some_field');
}
},
'alpha_num',
],
]);