バリデーションとは
バリデーションとは、ユーザーから送信されたデータが期待する形式や条件を満たしているかを検証することです。 Laravelはリクエストオブジェクトのvalidate メソッドや専用のフォームリクエストクラスを使った、シンプルで強力なバリデーション機能を提供しています。
コントローラーでのバリデーション
$request->validate() の使い方
コントローラーのメソッド内で $request->validate() を呼び出すのが、最もシンプルなバリデーション方法です。
バリデーションに失敗すると、Laravelはユーザーを前の画面に自動でリダイレクトし、エラー情報をセッションに保存します。
ルートを定義します。
validate メソッドにはフィールド名をキー、ルールを値とした配列を渡します。
ルールはパイプ | で区切るか、配列で指定できます。
主要なバリデーションルール
利用可能なすべてのバリデーションルールは公式ドキュメントで確認できます。
バリデーション済みデータの利用
validate メソッドの戻り値は、バリデーションに通ったデータのみを含む配列です。
信頼できるデータとして安全に使えます。
Bladeテンプレートでのエラー表示
バリデーションに失敗すると、Laravelは$errors 変数をすべてのビューで自動的に利用できるようにします。
web ミドルウェアグループに含まれる ShareErrorsFromSession ミドルウェアがこれを担っています。
すべてのエラーを一覧表示する
フィールドごとにエラーを表示する
@error ディレクティブを使うと、特定のフィールドのエラーをインラインで表示できます。
フォームリクエスト
フォームリクエストとは
バリデーションロジックが複雑になってきた場合は、「フォームリクエスト」クラスに切り出すのが効果的です。 フォームリクエストはバリデーションと認可のロジックをひとつのクラスにまとめたカスタムリクエストクラスです。フォームリクエストの作成
make:request Artisanコマンドでフォームリクエストクラスを生成します。
app/Http/Requests/StorePostRequest.php が生成されます。
rules() メソッド
バリデーションルールを配列で返します。コントローラーの validate メソッドに渡す配列と同じ形式です。
authorize() メソッド
このリクエストを実行する権限があるかを判定します。
true を返すと認可OK、false を返すと403レスポンスが自動的に返されます。
認証済みユーザーのみ許可する場合、auth()->check() で確認できます。
チュートリアルでは true を返しておけば問題ありません。
コントローラーへの注入
フォームリクエストはコントローラーメソッドのタイプヒントとして指定するだけで使えます。 コントローラーが呼び出される前にバリデーションが実行されるため、メソッド内にバリデーションコードを書く必要はありません。$request->validated() でバリデーション済みのデータのみを取得できます。
実践例:投稿フォームの作成と保存
フォームの表示から送信・バリデーション・保存までの一連のフローです。1
ルートの定義
2
フォームリクエストの作成
3
コントローラーの実装
4
Bladeテンプレートの作成
Bladeフォームには必ず
@csrf ディレクティブを含めてください。CSRFトークンがないとLaravelは419エラーを返します。次のステップ
HTTPリクエスト
リクエストオブジェクトを使ったデータ取得方法を振り返ります。