前提
- バリデーションエラーがあった場合、エラー内容はフラッシュセッションに保存される
- 上記フラッシュセッションにエラーが保存されていた場合、
その内容は$errors変数に自動的に格納される - この$errors変数を活用することでメッセージの表示が簡単にできる
1. エラーがあった場合に上部にアラートを表示する
こんなやつ
$errors->any()
を使用する
これはエラーが1つでもある場合はtrueを返してくれるメソッド
@if ($errors->any())
<p class="error-message">入力内容をご確認ください。</p>
@endif
2. 項目に紐づくエラーメッセージを1つだけ表示する
$errors->has('項目名')
メソッドでその項目に紐づくエラーがあるか判定する
ある場合は、$errors->first('項目名')
で1番最初のエラーを表示する
@if($errors->has('name'))
<div class="error-txt">{{ $errors->first('name') }}</div>
@endif
3. 項目に紐づくエラーメッセージを全て表示する
$errors->get('項目名')
メソッドでその項目に紐づくエラー配列を取得して
foreachで全て表示する
(存在しない場合は空の配列を返してくれるので$errors->has('項目名')
メソッドは不要)
@foreach ($errors->get('name') as $message)
<p class="error-txt">{{ $message }}</p>
@endforeach
4. 配列の要素のエラーを表示する
例えば下記のような配列の要素の場合
<input type="text" name="tags[]" />
'tags.*'
で全件取得、indexを指定する場合は'tags.1'
のように指定する
- 全て表示するソース
@foreach ($errors->get('tags.*') as $messages)
@foreach ($messages as $message)
<div class="error-txt">{{ $message }}</div>
@endforeach
@endforeach
- indexを指定して表示するソース
@if($errors->has('tags.1'))
<div class="error-txt">{{ $errors->first('tags.1') }}</div>
@endif
Laravelで個人的によく使うバリデーションエラーの表示の仕方をまとめた