Laravel验证 - 日期验证中的常见规则

4

我目前有一条验证规则,像这样:

  public function rules()
  {
   return [
        'startDate' => 'required|sometimes|before_or_equal:endDate',
        'endDate' => 'sometimes|required|after_or_equal:startDate',
    ];
  }

有时选项的工作原理是,如果字段存在,则运行验证规则。但是,如果结束日期未发送或为空,则我的“before or equal”规则会启动并失败。在我的应用程序中的某些情况下,结束日期将为null。在这种情况下,是否有一种方法可以“取消”startDate验证规则,或者我需要创建一个自定义验证器来实现这个目的?

类似于before_or_equal_when_present之类的东西吗?


1
你能不能删除 before_or_equal,因为如果存在结束日期,则注释必须在开始日期之后。如果这是真的,那么开始日期也必须在结束日期之前。因此,如果 endDate 存在且在 startDate 之前,那么 after_or_equal 规则已经生效了。 - milo526
@milo526 - 哎呀!是的,那会行。我觉得那是我的逻辑失误。 - Squiggs.
1个回答

1
你可以使用IF语句在规则函数中添加和操作规则。您可以通过将$this称为请求本身来访问输入:
public function rules()
  {
   $rules = [
        'startDate' => 'required|sometimes|before_or_equal:endDate',
        'endDate' => 'sometimes|required|after_or_equal:startDate',
    ];

   if( $this->input('endDate') > 0)
          $rules['endDate'] = "rule". $rules['endDate']

   return $rules;
}

这只是一个模型,让您知道您可以操作并访问传递的字段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接