laravelアプリでのバリデーションの設定方法
前置き
今更ながらlaravelアプリでのバリデーションの設定方法を学んだのでメモとして残しておきます。
目次
- バリデーションルールの設定
- バリデーションエラーメッセージの設定
- バリデーションエラーメッセージの日本語化
- バリデーションエラーメッセージのビューへの表示
バリデーションルールの設定
バリデーションルールは、laravelではコントローラ内に記述します。
マイグレーションファイルやモデルではないんですね。
記述方法は、以下の通り。
$rules = [
"フィールド名1" => ["バリデーション1", "バリデーション2", ....],
"フィールド名2" => ["バリデーション1", "バリデーション2", ....],
];
$this->validete($request, $rules);
// フィールド名をキー、バリデーションルールを値とする連想配列でバリデーションを設定。
// バリデーションルールを配列の形式にすれば、一つのフィールドに対して複数のルールを設定することも可能。
// 最後に$this->validate($request, $rules)でバリデーションを適用。
バリデーションエラーメッセージの設定
laravelではデフォルトのエラーメッセージが用意されています。
それらを使用するのではなく、独自にメッセージを設定したい場合には、validateメソッドの第3引数として指定します。
例)
$messages = [
"name.required" => ":attributeが入力されていません"
]
$this->validate($request, $rules, $messages);
// name.requiredのように、フィールド名とバリデーションルールをセットで指定(こうすることで、同じフィールド名でもルールごとにメッセージを設定可能)。
// メッセージも連想配列の形で記述。
// フィールド名はメッセージの中では:attributeと記述。
エラーメッセージの翻訳
エラーメッセージを翻訳したい場合には、validateメソッドの第4引数を使います。
$translate = [
"name" => "お名前"
];
$this->validate($request, $rules, $messages, $translate);
エラーメッセージの表示
エラーメッセージを表示するには、以下の手順が必要になります。
- エラーメッセージの有無の確認
- エラーメッセージを配列として取得
- foreachメソッドを用いた展開
エラーメッセージの有無の確認
@if($errors->has("フィールド名"))で、フィールドごとのエラーの有無を確認。
has_errorsは、引数として与えたフィールドに関してエラーがあるかどうかを真偽値で返すメソッドです。
エラーメッセージ全体の取得
$errors->get("フィールド名")でそのフィールドに関するエラーメッセージ全体を取得。
エラーメッセージの展開
@foreach($errors->get("field") as $error)でエラーメッセージを個別に取り出し。