我正在使用Laravel表单请求验证来验证对象数组,在每个对象中,我们有两个键neverExpires
和numberOfBillingCycles
。这两个键都不是必需的,但是如果两个键都具有值,则验证将失败,因为我只想接受一个或另一个。
"addOns": {
"add": [
{
"inheritedFromId": "EMEX1",
"neverExpires": "false",
"numberOfBillingCycles": "10"
},
{
"inheritedFromId": "EX1",
"neverExpires": "true"
},
{
"inheritedFromId": "EX2"
}
]
},
因此,首先,由于neverExpires
和numberOfBillingCycles
都具有值,因此它应该无法通过验证。第二个和第三个实例应该通过,因为它仅包含neverExpires
或两者都不包含。
我尝试创建一个自定义验证器并将两个字段作为参数传递,例如addOns.add.*.neverExpires
和addOns.add.*.numberOfBillingCycles
,但是问题是参数索引未设置并且我似乎找不到自定义规则中的数组索引,使我能够检查正确的数组对象值。
希望这有意义吗?提前加油。
答案 0 :(得分:0)
只要使用> = Laravel 5.5,就可以验证add
数组中的每个项目,而不是单个属性:
public function rules()
{
return [
'addOns.add.*' => [
function ($attr, $value, $fail) {
if (array_has($value, ['inheritedFromId', 'numberOfBillingCycles'])) {
$fail('You can not have both');
}
},
],
];
}