I'm using Laravel Form Request Validation to validate an array of objects, within each object we have two keys neverExpires
and numberOfBillingCycles
. Neither of these two keys are required, but if both have a value validation should fail as I only want to accept one or the other.
"addOns": {
"add": [
{
"inheritedFromId": "EMEX1",
"neverExpires": "false",
"numberOfBillingCycles": "10"
},
{
"inheritedFromId": "EX1",
"neverExpires": "true"
},
{
"inheritedFromId": "EX2"
}
]
},
So, in the first instance, because both neverExpires
and numberOfBillingCycles
have values it should fail validation. The second and third instances should pass as it only contains neverExpires
or doesn't contain either.
I've tried creating a custom validator and passing in the two fields as parameters eg. addOns.add.*.neverExpires
and addOns.add.*.numberOfBillingCycles
but the problem is the parameter index is not set and I can't seem to find the array index within the custom rule to enable me to check the right array object values.
Hope this makes sense? Cheers in advance.
As long as you're using >= Laravel 5.5 you could validate the each item in the add
array rather than the individual attributes:
public function rules()
{
return [
'addOns.add.*' => [
function ($attr, $value, $fail) {
if (array_has($value, ['inheritedFromId', 'numberOfBillingCycles'])) {
$fail('You can not have both');
}
},
],
];
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.