Skip to main content

什麼是驗證

驗證是指檢查使用者送出的資料是否符合預期格式與條件。 Laravel 透過 request 物件的 validate 方法或專用的 form request 類別,提供簡潔而強大的驗證功能。

於 Controller 進行驗證

$request->validate() 的使用

在 controller 方法內呼叫 $request->validate() 是最簡單的驗證方式。 驗證失敗時,Laravel 會自動將使用者導回前一頁,並把錯誤資訊存到 session。 定義路由:
建立 controller:
validate 方法傳入以欄位名為 key、規則為 value 的陣列。 規則可用 pipe | 分隔,或以陣列指定。

主要驗證規則

所有可用的驗證規則請參閱官方文件

使用驗證通過的資料

validate 方法回傳的是只包含通過驗證資料的陣列。 可作為可信資料安全地使用。

在 Blade 樣板顯示錯誤

驗證失敗時,Laravel 會自動讓所有 view 都能使用 $errors 變數。 這由 web middleware 群組中的 ShareErrorsFromSession middleware 負責。

顯示所有錯誤

依欄位顯示錯誤

@error 指示詞可為特定欄位在 inline 顯示錯誤。
使用 old('欄位名') 可在驗證失敗後仍將使用者的輸入回填至表單。

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 即可。
authorize 方法回傳 false,controller 方法不會執行,會回傳 403 Forbidden 回應。

注入到 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 物件取得資料。
最後修改於 2026年8月2日