Laravel验证:required_if条件始终通过

时间:2020-10-07 20:11:49

标签: php laravel

根据laravel验证文档:

required_if:otherfield,value,... 如果anotherfield字段等于任何值,则验证中的字段必须存在且不能为空。

这是我的考试:

    $validator = Validator::make([
        'assessment' => [
            'hasConfirmation' => 0,
            'expiredDate' => "12/2020"
        ]
    ],
        [
            'assessment.hasConfirmation' => Rule::in([0, 1, null]),
            'assessment.expiredDate' => Rule::requiredIf('assessment.hasConfirmation' === 1),

        ]);

   $validator->passes(); // always return true

我希望由于我未通过1,因此该测试将失败。但是这个测试总是可以通过

1 个答案:

答案 0 :(得分:0)

您可以使用带有requiredIf的闭包,该闭包返回一个布尔值以确定是否应应用“必需”规则:

$data = [
    'assessment' => [
        'hasConfirmation' => 0,
        'expiredDate' => "12/2020"
    ]
];

$validator = Validator::make($data, [
    'assessment.hasConfirmation' => Rule::in([0, 1, null]),
    'assessment.expiredDate' => Rule::requiredIf(function () use ($data) {
        return data_get($data, 'assessment.hasConfirmation') === 1;
    });
]);