2017-04-15 103 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; 
} 

這只是一個樣機只是讓你知道,你可以操縱,並已獲得通過的領域。