php - Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的

标签 php laravel validation

我使用 Laravel 表单请求验证来验证对象数组,在每个对象中我们有两个键 neverExpiresnumberOfBillingCycles。这两个键都不是必需的,但如果两者都有值,验证应该会失败,因为我只想接受其中一个。

"addOns": {
    "add": [
        {
            "inheritedFromId": "EMEX1",
            "neverExpires": "false",
            "numberOfBillingCycles": "10"   
        },
        {
            "inheritedFromId": "EX1",
            "neverExpires": "true"
        },
        {
            "inheritedFromId": "EX2"
        }
    ]
},

因此,在第一个实例中,由于 neverExpiresnumberOfBillingCycles 都有值,因此验证应该失败。第二个和第三个实例应该通过,因为它只包含 neverExpires 或两者都不包含。

我尝试创建一个自定义验证器并将两个字段作为参数传递,例如addOns.add.*.neverExpiresaddOns.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/

相关文章:

security - 从客户端 (&) 检测到潜在危险的 Request.Path 值

php - 多行查询时 PDO 获取失败

php - 根据 Laravel 中的表单输入验证复合模型字段的唯一性?

javascript - Vue.js 上失去自动融合功能

laravel - 使用 laravel 修复谷歌抓取 404 错误

带有工具提示的 WPF 自定义验证器

php - 多维数组上的 json_encode() - 带有字符串键

php - OpenEMR 5.0.0 布局中缺少保险选项

php - 如果 Twitter Bootstrap 不存在 4 列宽的 div,则将 8 列宽的 div 设置为所有 12 列

ruby-on-rails - 仅在存在时验证属性(仅当用户填写时)