
【Laravel】フォームリクエストを使ったバリデーション方法
「フォームリクエスト」とは、バリデーション処理を外部クラスにまとめることができる機能です。
任意のリクエストで呼び出すことが可能で、外部ファイル化することでコントローラー内のコードもスッキリさせることができます。
フォームリクエストの作成
artisanコマンドを使い作成します。(コマンドの方が楽です)
前回の続きで BoardController
の拡張用ファイルなので「BoardRequest」とします。
[php]
$ php artisan make:request BoardRequest
-- 成功したら以下のメッセージが出る
Request created successfully.
[/php]
上記のコマンド発行で「app\Http\Requests\」配下に「BoardRequest.php」が作成されます。
作成された直後の内容
[php]
authorizeメソッド
このフォームリクエストを利用が許可されているかを示すアクション。trueを返せば許可され、falseが帰った場合は403ステータスのレスポンスが返されます。
特になにも判定がない場合は常にtrueを返します。
rulesメソッド
バリデーションの検証ルールを設定するアクション。コントローラー内に書いた検証ルールを書けば良いとのこと。
フォームリクエスト修正
[php]
'required|max:10',
'email' => 'email',
'message' => 'required|max:50',
];
}
}
[/php]
authorizeメソッドは true を返すように変更。
rulesメソッドはコントローラー内に書いていた検証ルールをそのままコピペ。
BoardControllerを編集
次に前回作成したコントローラーを編集。
(1)フォームリクエストを使用する旨をコントローラーに記述
(2)addメソッド内に書いていた検証ルールを削除
[php]
use App\Http\Requests\BoardRequest; // ←★(1)追加
class BoardController extends Controller
{
public function index(Request $request)
{
// 略
}
public function add(BoardRequest $request) // (1)Request → BoardRequestに変更
{
$data = [
'msg' => '正しく入力されました!',
];
// (2)このあたりにあったバリデーション設定を削除
return view('board.index', $data);
}
}
[/php]
送信結果
フォームに何も記入せずに「送信」ボタンを押したところです。
前回と同じく英語のメッセージが表示されました。どうやら動作は問題なくできているようです。
メッセージのカスタマイズ(オーバーライド)
動作の確認ができたので、次にエラーメッセージを日本語化してみたいと思います。
BoardRequestクラスへ「messages」メソッドを追加し、継承元で設定されているメソッドをオーバーライドする形をとります。
[php]
/**
* エラーメッセージを日本語化
*
*/
public function messages() {
return [
'subject.required' => '件名を入力してください',
'subject.max' => '件名は10文字以内で入力してください',
'email.email' => 'メールアドレスとして正しい形式ではありません',
'message.required' => 'メッセージを入力してください',
'message.max' => 'メッセージは50文字以内で入力してください',
];
}
[/php]
の形でメッセージ情報を作成。
メッセージ情報はそれぞれのフィールドに用意した1つ1つのルールごとに用意します。
1項目に複数のルールが設定されている場合はそれぞれのメッセージを用意する必要があり、ルールに対して記述していないメッセージがある場合は英語のデフォルトメッセージが表示されます。