Laravel9.41.0では、、バリデーションエラー表示用のcomponents/auth-varidation-errors.blade.phpファイルがなくなり、代わりにinput-error.blade.phpファイルがついてきます。
今までのどおりの形でエラーを表示しようとすると、ビューからcomponentsに渡すパラメータの形が間違っているためにエラーになります。
具体的には、下記のようなエラーメッセージが出る可能性があります。
どうすればよいのか、対策と、そもそもの原因をお伝えしますね。
Laravel9 エラーメッセージを出そうとするとエラーになる時の対策
これまでのエラーメッセージ表示方法
resources/views/components/auth-varidation-errors.blade.phpファイルを使って、下記のように、バリデーションエラーを表示することができました。
1 |
<x-auth-validation-errors class="mb-4" :errors="$errors" /> |
現在のエラーメッセージ表示方法
現在は、resources/views/components/input-error.blade.phpファイルを使って、バリデーションエラーを表示します。
エラーメッセージをすべて表示するなら、下記コードを、ビューファイル(blade.php)のエラーを表示したい箇所にいれます。
1 |
<x-input-error class="mb-4" :messages="$errors->all()"/> |
Laravel9 エラーメッセージを出そうとするとエラーになる原因
なぜauth-validation-errors では、$errors を渡していたのに、input-error には、$errors->all() のように、エラーメッセージだけ渡すのかを説明しますね。
変更前のauth-varidation-errors.blade.phpファイルには、下記のように $errors->all() のコードが入っており、ここでエラーを取り出してくれていました。
そのため、オブジェクトのまま受け渡せばOKでした。
【auth-varidation-errors.blade.php】
1 2 3 |
@foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach |
ですが変更後のinput-error.blade.phpファイルには、$errorsから値を取り出してくれる部分がなくなりました。
【input-error.blade.php】
1 2 3 |
@foreach ((array) $messages as $message) <li>{{ $message }}</li> @endforeach |
そのため、componentsに受け渡す前に、ビュー側で $errors->all() を行い、値を取り出す必要がでてきたのです。
さいごに
今回の変更により、components部分のコードはスッキリしたように思います。
なおLaravelは、こんなふうに、ある日突然さくっと変更されていたりします。
がんばって、Laravelの後をついていきましょう^^
なお、わたしは【Laravelの教科書】という学習サイトを運営しており、変更点があったときには、受講生の方から、教えてもらえたりします。
今回の変更も、受講生さんたちの連絡で知りました。おかげで 学習サイトは、今のLaravelに適応した内容になっています。
最新のLaravelをいちから学びたいと思ったら、【Laravelの教科書】を活用してくださいね。
詳細は、下記ボタンをクリックしてください。基礎編は無料です♪
【Laravelの教科書を通じて作成する画面】