2017-04-15 122 views
3

我现在有一个验证规则,看起来像这样:Laravel验证有时日期验证规则

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

有时选项可按照我的理解的基础上,如果字段存在,运行验证规则。但是,如果结束日期未发送或为空,则我之前或同等规则将启动并失败。在我的应用程序中的某些情况下,结束日期将为空。有没有办法在这个实例中'取消'startDate验证规则,还是需要为此创建一个自定义验证器?

东西像before_or_equal_when_present

+1

难道你不能只是删除'before_or_equal',因为endnote必须在开始日期之后,如果它存在。如果这是真的,则开始日期也必须在结束日期之前。因此,如果endDate存在并且在开始日期之前,那么after_or_equal规则就已经投入了。 – milo526

+0

@ milo526 - doh!是的,这是可行的。我想我的逻辑失败了。 – Paul

回答

0

您可以使用IF在规则函数中添加和操作规则。您可以访问有指$以此为请求本身的投入:

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; 
} 

这只是一个样机只是让你知道,你可以操纵,并已获得通过的领域。