Laravel – バリデーション – validate()

概要

Laravelにおけるフォーム入力のバリデーションのうち、validate()メソッドによる手順を整理する。

検証ルールの詳細については別途整理している。

コード例

ビュー

以下のビューで入力と入力結果の表示を兼用。

コントローラー

GETに対するアクションは、単にビューを表示するだけ。

フォームからのPOSTに対するアクションは、ユーザー名、ハンドルネーム、メールアドレスの3つの入力を受け取り、下部にそれを表示する。タイトル表示で入力結果を表示していることが判別できる。

条件の設定

基本形

検証条件設定の基本形は以下のとおり。検証条件の詳細はこちらを参照。

  • アクションの引数のRequestインスタンスのvalidate()メソッドで設定
  • 条件は連想配列でvalidate()の引数に渡す
  • 連想配列のキー文字列がフォームの各アイテムのname属性値
  • キーに対応する値が各アイテムに対する条件で、文字列で設定

$request->validate(['name属性' => '検証条件']);

複数条件

1つのアイテムに複数の条件があるときの設定方法には2つある。

配列にする方法

検証条件の文字列を要素とする配列を値とする。

$request->validate(['name属性' => ['検証条件1', '検証条件2', ...]]);

文字列内で'|'でつなぐ方法

検証条件をOR演算子と同じ'|'でつないだ文字列を値として渡す。

$request->validate(['name属性' => '検証条件1|検証条件2|...']);

検証結果に応じた処理

処理の流れ

検証結果が妥当な場合は、そのまま以降の処理が実行される。検証結果の1つ以上が妥当でなければ、validate()メソッドより後は実行されず、元の画面がレンダリングされる。

先のコードで、すべての条件が妥当なら、タイトルが「バリデーションサンプル結果」となり入力内容が表示される。一方、条件の何れか1つでも妥当でなければ、タイトルは「バリデーションサンプル入力」となり入力内容は表示されない。

$errors

バリデーションの結果が妥当でない場合、グローバル変数$errorsにメッセージが保存される。$errorsViewErrorBagクラスのオブジェクトで、以下の様にすることで各エラーメッセージを順次取り出すことができる(エラーがない場合は処理されない)。

foreach ($errors->all() as $error)

以下は$errorsの内容をビューに表示させる例。コントローラーで特に定義等の必要はなく、検証結果に応じてセットされる。

たとえばユーザーネームを空にし、ハンドルネームに11文字、メールアドレスに@マークなしの文字列を入れた場合の$errorsの表示例は以下のとおり。

The name field is required.

The handlename may not be greater than 10 characters.

The email format is invalid.

フォームリクエスト

ここではコントローラーにバリデーション処理を記述したが、フォームリクエストを利用することによってこれを分離できる。

また、フォームリクエストのメソッドをオーバーライドして、エラーメッセージをカスタマイズすることもできる。

参考:Laravel 6.x バリデーション~エラーメッセージのカスタマイズ

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です