2016-11-22 169 views
3

我想驗證給定的演講。有一些驗證規則,但我想用驗證函數以某種方式擴展它,該驗證函數以3個屬性作爲參數,並檢查數據庫中的其他講座,並且如果沒有講座重疊,則返回有效。講座已經開始,結束DateTime屬性。Laravel驗證整個請求

驗證功能

private function noOtherLecturesOnGivenTime($start, $end, $hall) 
{ 
    if(!$start instanceof Carbon) { 
     $start = new Carbon($start); 
    } 

    if(!$end instanceof Carbon) { 
     $end = new Carbon($end); 
    } 

    if(is_null($hall)) { 
     return true; // if there is no hall defined, all times are acceptable 
    } 

    if(!$hall instanceof Model) { 
     /** @var Hall $hall */ 
     $hall = Hall::find($hall); 
    } 
    $overlappingLectures = $hall->lectures()->get()->filter(function ($lecture) use ($start, $end) { 
     // (Ts < e) and (Te > s) 
     return $start->lt($lecture->end) and $end->gt($lecture->start); 
    }); 

    return $overlappingLectures->count() === 0; 
} 

我不知道如何以及在哪裏把這個功能,所以Laravel的驗證拋出異常,我可以用國際化指定的錯誤消息。

謝謝

回答

1

查閱有關自定義驗證規則的文檔。

從創建規則來specifiying錯誤信息,有一個完整爲例有:

Laravel custom validation rules documentation

對於你的情況,你可以從驗證方法的要求取的參數。

我想,即使其它參數沒有設置仍然會出現驗證規則,不要忘記檢查,如果他們是在請求

+0

我讀,但我想給它既不請求的屬性。我想在驗證所有驗證規則後運行該函數。但我不想格式化422 - 我自己無法處理的實體(所以在驗證掛鉤不適用後)。 –

+0

您正在通過請求傳遞'$ end'' $ end'' $ hall'嗎?只需在自定義驗證規則中獲取您的請求即可獲取您的參數並使用您的功能 – Vuldo