雑記
【Laravel】フォームリクエストを使ってバリデーションしてみた
Uga
公開日:2024/02/13
社外向けの多言語対応システムを作成するにあたり、Laravelのフォームリクエストを使用したので勉強になったことをまとめます。
※コードの内容はLaravel公式に掲載されているものを代用しています。
フォームリクエストとは
フォームリクエストは、独自のバリデーションおよび認可ロジックをカプセル化するカスタムリクエストクラスです。
フォームリクエストを使用することで、Controller内でのバリデーションロジックを簡素化することができます。
フォームリクエストの使用方法
以下のコマンドで作成
1 |
php artisan make:request MyFormRequest |
作成したらControllerメソッドで指定します。
1 |
public function form(MyFormRequest $request) |
これによりControllerメソッドが呼び出される前にバリデーションを行うため
Controllerに記述していたバリデーションロジックを簡素化できます。
使用したメソッド
rules
バリデーションルールを記述します。
returnする値は配列の形にする必要があります。
1 2 3 4 5 6 7 |
public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'number' => 'nullable|numeric', ]; } |
また、バリデーションエラーの際に表示されるメッセージはmessagesメソッドに記述します。
今回は多言語対応のため、resources\lang\(言語)\validation.phpにて記述しました。
共通のエラーメッセージはデフォルトのものを使用し
独自のエラーメッセージについてはカスタムメッセージを使用しました。
custom配列に下記のように記述します。
1 2 3 4 5 6 |
'custom' => [ 'email' => [ 'required' => 'We need to know your email address!', 'max' => 'Your email address is too long!' ], ], |
prepareForValidation
バリデーションルールの適用前に入力値の整形を行いたい際に使用します。
今回は、ルール適用前に入力値の一部データに対して配列のインデックスを変更する必要があったため使用しました。
1 2 3 4 5 6 |
protected function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->slug), ]); } |
終わり
フォームリクエストを使用することで、バリデーションの可読性が向上し、Controllerもキレイになりました。
他にも使用していないメソッドがあるので、タイミングがあれば積極的に使用したいと思います。