【问题标题】: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。此版本中不存在可空规则。我是什么做的?我无法升级,因为这是一项工作而不是个人项目。

标签: php laravel laravel-5 laravel-validation


【解决方案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',
    ]);
}

【讨论】:

  • 感谢您花时间编写代码!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多