[Laravel]フォームのバリデーションをRequestクラスに分離する
LaraveのバリデーションチェックをRequestクラスの別ファイルにまとめる方法。
すでに各所で解説が書かれているだろうけれど、自分なりに把握出来たのでメモ。
作成
生成
1
|
|
これで、app/Http/Requests/
以下に生成される。
デフォルトで生成される内容は以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
認証
一つ目のメソッド、authorize
はデフォルトではfalse
となっている。
これは、このフォームを送信出来るユーザの認証を判定する箇所で、デフォルトのfalse
だと全てのユーザが弾かれてしまう。
なのでこれはtrue
に変更する。
バリデーションルール
肝心のバリデーションルールは、rules()
メソッド内の戻り値として書く。
配列にコントローラーに書いていた時と同じように書く。
例)
1 2 3 4 5 6 7 8 |
|
項目の名前 (日本語化)
バリデーションルールに引っかかった際に返されるエラーメッセージはデフォルトでは英語になっている。
これを日本語にするには、言語ファイルを用意してやるとよい。
resouces/lang/ja/
以下に、validation.php
を置いてやる。
以下が、デフォルトの英語ファイルを日本語訳してくれているもの。
https://gist.github.com/syokunin/b37725686b5baf09255b
しかしこのままだと、項目名についてはnameで指定したもののママになってしまう。
これをカスタムで日本語化するには、さきほど追加した、validation.php
のattributes
で指定してやる。
例)
1 2 3 4 5 |
|
ここでの設定は全体での適用となるので、一括指定出来る反面、切り分けが出来ない。
これを各フォーム個別の設定としてやるために、先ほどの、Requestクラスに追加してやることが可能。
例)
1 2 3 4 5 6 7 8 9 |
|
戻り先
デフォルトの状態では、バリデーションエラーがあった場合は一つ前のページへ自動的に遷移する。
入力 → 確認 という遷移なら、確認に遷移してきた時点でエラーが出ると、一つ前の入力ページへ飛ぶ。
しかし、確認画面を挟むようなフォームの場合、確認画面から完了画面の際にもバリデーションチェックが必要となる。
これがデフォルトのままだと、
確認 → 完了 という遷移となり、エラーが出ると一つ前の確認画面に戻ってしまう。
ここでは入力画面に戻って欲しい。
その場合、Requestクラスで戻り先を指定してやる事が出来る。
1
|
|
変数名で指定の仕方を変えてやることが可能。
redirect
– URIでの指定redirectRoute
– 名前付きルートの名前での指定redirectAction
– コントローラーのアクションでの指定
[参考]
- 【メモ】 Laravel 5.1 において FormRequest でエラーが発生した際の戻し先を変更する – n2utech
- framework/FormRequest.php at 5.1 · laravel/framework · GitHub
完成
最終的に以下のような形とした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|