如果字段为空,如何忽略验证规则?
Posted
技术标签:
【中文标题】如果字段为空,如何忽略验证规则?【英文标题】:How to ignore a validation rule if a field is null? 【发布时间】:2019-12-16 18:37:33 【问题描述】:我有 2 个日期的这些规则。但我希望只有在输入了retired_on 日期时才遵循 before_or_equal 规则。我该怎么做呢?有时不能解决这个问题。如果没有输入retired_on 日期,则必须能够输入entered_on 而不会出现任何错误。使用这两条规则,由于retired_on 默认为空白,因此一开始就会出现错误。
'entered_on' => 'required|date_format:Y/m/d|before_or_equal:retired_on',
'retired_on' => 'date_format:Y/m/d|after_or_equal:entered_on',
【问题讨论】:
我使用的是 Laravel 5.1。此版本中不存在可空规则。我是什么做的?我无法升级,因为这是一项工作而不是个人项目。 【参考方案1】:使用nullable
规则:
'retired_on' => 'nullable|date_format:Y/m/d|after_or_equal:entered_on',
【讨论】:
我添加了可以为空的规则,结果是“哎呀,好像出了点问题”。现在总是显示。 @Lorenz 你确定数据库中的retired_on 已经可以为空了吗? :) 我查看了迁移,是的,retired_on 与 enter_on 一起可以为空。 顺便说一句,我使用的是 Laravel 5.1,而我使用的 after_or_equal 和 before_or_equal 来自自定义的验证器。 我在看 Laravel 5.1 教程,确实没有可以为空的规则。看来我不能使用可为空的规则。有没有办法做到这一点?【参考方案2】:既然你说你不能使用 nullable
或升级 Laravel 版本,你总是可以将它分开并有条件地验证该字段。
// your other input validations
$this->validate($request, [
'entered_on' => 'required|date_format:Y/m/d|before_or_equal:retired_on',
]);
// only validate 'retired_on' if it exists and is not null
if ($request->has('retired_on') && !is_null($request->input('retired_on')))
// pre-check passed, do validation
$this->validate($request, [
'retired_on' => 'date_format:Y/m/d|after_or_equal:entered_on',
]);
【讨论】:
感谢您花时间编写代码!非常感谢。以上是关于如果字段为空,如何忽略验证规则?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 验证规则 - 要求字段显式为空,具体取决于另一个字段的值 (type_id)