Laravel5.2.31のプロジェクトで ResponseのwithErrors()メソッドが動作しない問題が起こり、3時間ぐらいはまったのでシェアします。

コントローラのバリデーションでいつも通り$this->validate([…])を始めたのですが、$errors変数に入っているはずのエラーメッセージが取り出せず。

Ver5.2.27の別プロジェクトで正常動作しているコードの移植だったのでなぜ??Why??となりました。3時間はハマりすぎですが、普段全く手が止まることもないような部分なので、デバッグの方法さえ忘れてしまったようです。

 
最終的にはデバッグとstackoverflowでこの記事を見つけて解決しました。10件もアンサーが付いているホットな話題だったようです。
Laravel 5.2 $errors not appearing in Blade

This is a breaking problem with the 5.2 upgrade. What’s happening is the middleware which is responsible for making that errors variable available to all your views is not being utilized because it was moved from the global middleware to the web middleware group.

 

解決方法は、Kernel.phpの$middlewareGroups[“web”]の中身をグローバルな$middlewareへ移すこと。

マイナーアップデートにも関わらず、このあたりのコードが変わってしまったようです。

修正すると$errorsがセッションから取れるようになりました。めでたしめでたし。