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)でエラーメッセージを個別に取り出し。