2013-12-19 22 views
5

在laravel中,爲了驗證用戶的某些輸入,我們可以使用驗證器類。驗證規則如何在laravel中工作

例如用於通過電子郵件的註冊,驗證規則可以是:

array('email' => 'required|email|unique:users,email') 

它說,需要電子郵件,電子郵件應該是電子郵件格式,並在表users之前應該沒有登記。 (應該是唯一的)

那麼,這是如何工作的?

是否使用short-circuit?如果我們通過一步一步

  • 它檢查是否輸入由required
    如果通過設置,跳轉到下一個規則
  • 然後檢查是否是電子郵件格式
    如果獲得通過,跳轉到下一個規則
  • 檢查,如果沒有在表users

我問一個人,他說,它檢查所有的存在,經過所有規則。
如果required規則未通過,則沒有理由檢查輸入是否爲電子郵件格式。
如果它不是電子郵件格式,則不需要檢查數據庫。

有誰知道它是如何工作的?

+1

您是否簽出並試圖瞭解驗證類的來源?這些文件位於'vendor/laravel/src/Illuminate/Validation'文件夾中。 –

+0

如果一個必填字段失敗並且Laravel停止檢查其餘規則,現在,您如何知道其餘的必填字段是有效的並顯示錯誤消息。 – Anam

+0

例如:如果一個電子郵件輸入甚至沒有填寫和提交,爲什麼你應該向用戶報告:嘿電子郵件格式錯誤!!!,似乎有點傻,它應該報告給用戶:嘿電子郵件是必需的!這個問題是關於一個用戶輸入的所有規則。不是所有的用戶輸入 – Pars

回答

3

這取決於規則。在實踐中,如果required屬性失敗,Laravel將停止處理其他規則。但是,如果required通過,它將繼續驗證其他規則。

這意味着您可以在同一字段上收到多個驗證錯誤。

0

我無法找到Laravel 4的詳細信息,但Laravel 5.4 documentation意味着所有驗證規則均按照無短路評估的順序運行。

在Laravel 5中,您可以通過在驗證規則前加上'bail'來強制進行短路評估。

$this->validate($request, [ 
    'title' => 'bail|required|unique:posts|max:255', 
    'body' => 'required', 
]); 

我來到這裏尋找爲什麼短路會默認爲關閉,我認爲詹姆斯是他的推理正確的,它是在同一個場接收多個驗證錯誤。