什麼是驗證
驗證是指檢查使用者送出的資料是否符合預期格式與條件。 Laravel 透過 request 物件的validate 方法或專用的 form request 類別,提供簡潔而強大的驗證功能。
於 Controller 進行驗證
$request->validate() 的使用
在 controller 方法內呼叫 $request->validate() 是最簡單的驗證方式。
驗證失敗時,Laravel 會自動將使用者導回前一頁,並把錯誤資訊存到 session。
定義路由:
validate 方法傳入以欄位名為 key、規則為 value 的陣列。
規則可用 pipe | 分隔,或以陣列指定。
主要驗證規則
所有可用的驗證規則請參閱官方文件。
使用驗證通過的資料
validate 方法回傳的是只包含通過驗證資料的陣列。
可作為可信資料安全地使用。
在 Blade 樣板顯示錯誤
驗證失敗時,Laravel 會自動讓所有 view 都能使用$errors 變數。
這由 web middleware 群組中的 ShareErrorsFromSession middleware 負責。
顯示所有錯誤
依欄位顯示錯誤
用@error 指示詞可為特定欄位在 inline 顯示錯誤。
Form Request
什麼是 Form Request
當驗證邏輯變複雜時,將其拆出到「form request」類別會更有效。 form request 是把驗證與授權邏輯整合在一起的自訂 request 類別。建立 Form Request
以make:request Artisan 指令產生 form request 類別。
app/Http/Requests/StorePostRequest.php。
rules() 方法
以陣列回傳驗證規則。格式與傳給 controller validate 方法的陣列相同。
authorize() 方法
判斷是否有權執行此請求。
回傳 true 表示授權通過,回傳 false 會自動回傳 403 回應。
只允許已認證使用者時,可用 auth()->check() 確認。
教學中回傳 true 即可。
注入到 Controller
Form request 只要在 controller 方法上以 type-hint 指定即可使用。 呼叫 controller 前會先執行驗證,因此方法內無需寫驗證碼。$request->validated() 可取得只包含驗證通過資料。
實務範例:文章表單的建立與儲存
從表單顯示到送出、驗證、儲存的一系列流程。1
定義路由
2
建立 form request
3
Controller 的實作
4
建立 Blade 樣板
Blade 表單務必包含
@csrf 指示詞。若無 CSRF token,Laravel 會回傳 419 錯誤。後續步驟
HTTP Request
複習如何用 request 物件取得資料。