2017-02-08 131 views
0

我現在有幾個驗證規則如下:Laravel驗證

\Route::post("/logError", "[email protected]"); 

//In LogController 
public function logError(Request $request) { 
    $rules = [ 
     "name" => "required", 
     "message" => "required", 
     "level" => "in:info,debug,error" 
    ]; 

    $this->validate($request,$rules); 
    // Log the message or do whatever 
}); 

這工作正常輸入,比如

[ "name"=>"Not found", "message" => "Element not found", "level" => "error" ] 
[ "name"=>"Not found", "message" => "Element not found" ]` 

但是它拋出像

[ "name"=>"Not found", "message" => "Element not found", "level" => "randomgibberish" ] 
爲輸入異常

我的問題是,因爲「級別」是可選的,是否有內置的方式來驗證輸入,並刪除opt從它不是有效的元素,而不是拋出一個驗證異常?如果不是,我將不得不重寫控制器驗證方法來實現這一點?

+0

忽略無效輸入是一個滑坡。考慮客戶端的錯字,發送'錯誤'級別。抑制水平可以使錯誤隱藏多年,使維護複雜化。如果仍然是你的意圖,輸入衛生設施不應與驗證相結合。我會將規則和getValidationErrors()的結果傳遞給sanitiser,並在那裏修改請求。 –

+0

@AlexBlex我想問題是消毒輸入和驗證輸入糾纏在我腦海中(可能是因爲PHP中的filter_var'可以同時執行這兩個操作)。我會試着從我的頭上解開它們(然後我的代碼)。 – apokryfos

回答

1

驗證程序不會修改請求輸入數據,您需要在控制器中創建某種中間件或函數來檢查輸入參數,並將它們與您希望Laravel檢查的中間件或函數進行比較。

所以,是的,我認爲你需要擴展驗證方法,或者嘗試一個只有這樣的輔助函數。