Laravel

【Laravel】フォームリクエストを使ったバリデーション方法

「フォームリクエスト」とは、バリデーション処理を外部クラスにまとめることができる機能です。
任意のリクエストで呼び出すことが可能で、外部ファイル化することでコントローラー内のコードもスッキリさせることができます。

フォームリクエストの作成

artisanコマンドを使い作成します。(コマンドの方が楽です)
前回の続きで BoardController の拡張用ファイルなので「BoardRequest」とします。

上記のコマンド発行で「app\Http\Requests\」配下に「BoardRequest.php」が作成されます。

作成された直後の内容

フォームリクエストは「FormRequest」クラスを親として継承して作成されており、デフォルトで2つのメソッドが用意されています。

authorizeメソッド

このフォームリクエストを利用が許可されているかを示すアクション。trueを返せば許可され、falseが帰った場合は403ステータスのレスポンスが返されます。
特になにも判定がない場合は常にtrueを返します。

rulesメソッド

バリデーションの検証ルールを設定するアクション。コントローラー内に書いた検証ルールを書けば良いとのこと。

フォームリクエスト修正

authorizeメソッドは true を返すように変更。
rulesメソッドはコントローラー内に書いていた検証ルールをそのままコピペ。

BoardControllerを編集

次に前回作成したコントローラーを編集。

(1)フォームリクエストを使用する旨をコントローラーに記述
(2)addメソッド内に書いていた検証ルールを削除

送信結果

フォームに何も記入せずに「送信」ボタンを押したところです。
前回と同じく英語のメッセージが表示されました。どうやら動作は問題なくできているようです。

メッセージのカスタマイズ(オーバーライド)

動作の確認ができたので、次にエラーメッセージを日本語化してみたいと思います。
BoardRequestクラスへ「messages」メソッドを追加し、継承元で設定されているメソッドをオーバーライドする形をとります。

'項目名'.'ルール名' => 'メッセージ'

の形でメッセージ情報を作成。

メッセージ情報はそれぞれのフィールドに用意した1つ1つのルールごとに用意します。
1項目に複数のルールが設定されている場合はそれぞれのメッセージを用意する必要があり、ルールに対して記述していないメッセージがある場合は英語のデフォルトメッセージが表示されます。

変更後の画面

-Laravel
-,