鶏口牛後な日々 〜へっぽこPHPエンジニアの発散の記録〜

PHPエンジニアを目指して奮闘中、でもブログは発散中

Laravelのedit/updateフォームでなぜか$errorsがundefinedになる

状況説明

ユーザー登録をすれば、ユーザー情報変更するのもお決まりですよね。

そのフォームを作ろうとして、入力後にはバリデーションのチェックもするので、初期入力時のフォームをそのまま転用しようとコピーしたところ、バリデーションもちゃんと聞いているはずなのに、なぜか $errors という変数はundefined だというエラーが出続ける。

バッチリな答え見つかる

Laravel update form erros undefined みたいな感じで検索して、StackOverflowに行き着きました。

毎度お世話になってます。

そんなに時間かからなかったので、結構ポピュラーなエラーということがわかる。

結果としては、routeで、 middleware => [ 'web' ] を指定しろ、というものでした。

私の場合は、webview画面を作っていたため、webブラウザで作っていた登録画面とは違う、web.phpみたいなそもそもweb用ではないrouteファイルを使っていたことで、middlewareがwebと指定されていなかったようでした。

$errors は、バリデーションをかけた時に、エラーが出たら、自動でリダイレクトしてくれて、エラー内容を取得してくれるというものなので、画面のあるwebブラウザで見ることを前提にしたもののための機能ということが改めてわかりました。

ということで、上記記載を

Route::middleware('web')->group(function () {
 //ここにルートを記載
}

といったようにグループにつけたところ、errorsをちゃんと取得して、表示してくれるようになりました。

viewに渡す変数なども、これを指定していないとundefinedみたいなエラーになってしまうので、今後気を付けたいと思います。