如果您使用exclude_if并且它为TRUE,Laravel可以忽略其他验证规则吗?

时间:2020-02-03 11:03:36

标签: php laravel validation

我正在使用最新版本的Laravel。

我在商店控制器中使用Validator,并且本质上我有一个名为“ current”的字段,该字段是必需的,并且应该是布尔值。我还有一个第二个字段,它是可选的,称为“ to_date”,JavaScript插件(moment.js)将为该字段提供一个日期,或者如果为null,则为控制器提供一个字符串“ Invalid date”。

如果“当前”等于0,我希望能够使用Validator将“ to_date”验证为日期。如果“当前”等于1,那么我希望忽略对“ to_date”字段的验证

我的代码开始为:

$validator = Validator::make($request->all(), [
        'current' => 'required|boolean',
        'to_date' => 'date',
]);

但是这当然失败了,因为没有提供“ to_date”时,前端会提供一个字符串“ Invalid date”,该字符串将使验证失败。然后,我进一步研究了Laravel的验证规则,并发现了似乎合适的'exclude_if'。

$validator = Validator::make($request->all(), [
        'current' => 'required|boolean',
        'to_date' => 'exclude_if:current,1|date',
]);

这仍然没有用,因为虽然它似乎从$ validator数组中“排除了它”,但它仍然转到“日期”验证并失败。因此,然后我查看了“保释金”,当Validator首次失败时,该保释金应该终止验证,但是,这也不起作用,因为exclude_if在运行时不会失败,并且脚本仍然达到“ date”并且失败。

任何帮助/指针都表示赞赏。

我敢肯定,可以通过将Validator包裹在if语句中并做一些逻辑检查是否在Validator中包括“ to_date”来解决此问题,但这似乎有点臭,而且不太整齐。

有什么想法吗? :)

2 个答案:

答案 0 :(得分:0)

问题是您有意提供错误的数据“无效日期”。

这将触发验证失败,因为存在数据。

exclude_if仅在验证后从数组中排除数据。

最好的解决方案是不发送错误数据,而执行required_if:current,0|date,并且当to_date为空且必填时,它将使日期验证部分失败。

答案 1 :(得分:0)

经Laravel 6.18.7测试,您的代码对我而言正常工作。如果仍然有问题,则可能需要检查您的输入。

我在修补程序中使用的示例代码:

>>> Validator::make([
    'current' => 1,
    'to_date' => 'invalid-data',
], [
    'current' => 'required|boolean',
    'to_date' => 'exclude_if:current,1|date',
])->passes();
=> true
相关问题