我使用 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
但问题是参数索引未设置,我似乎无法在自定义规则中找到数组索引来检查正确的数组对象值。
希望这是有道理的?提前干杯。
最佳答案
只要您使用 >= 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');
}
},
],
];
}
关于php - Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951437/