【Laravel】バリデーションエラー表示まとめ

えびさん

Laravelで個人的によく使うバリデーションエラーの表示の仕方をまとめた

前提

  • バリデーションエラーがあった場合、エラー内容はフラッシュセッションに保存される
  • 上記フラッシュセッションにエラーが保存されていた場合、
    その内容は$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