質問: [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) OS:Windows10 Pro ◆Laravelの実行環境 ・virtualBox ・vagrant ・Laravel Framework version 5.2.7 (Homestead) ・PHP 5.6.15
回答: ご利用のLaravelはバージョン5.2のようですね! 5.2は5.1からミドルウェア周りの設定が少し変更されたようなので、エラーの原因はそこだと思います。 (私も5.2を使い始めた時に同じエラーに遭遇したことがありますので...!) 「全リクエストの全ビューで、いつでも$errors変数は利用できるのが、重要なポイントです。」 なぜ上記の機能が実現できているかといいますと、エラーをセッションに入れているからです。 そして、その機能は、Kernel.php の $middlewareGroups['web'] 内に記載されている、 StartSessionミドルウェアとShareErrorsFromSessionミドルウェアで実現されているようです。 ``` protected $middlewareGroups = [ 'web' => [ // ~中略~ \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, // ~中略~ ], // ~中略~ ]; ``` そういう訳なので、$errors変数を使用するのであれば、 StartSessionミドルウェアとShareErrorsFromSessionミドルウェアを ルーティングに適用する必要があります。 具体的には、route.php上部のルーティングを、 下記のように'web'ミドルウェアグループで囲ってやることで、エラーは解消すると思われます。 ``` Route::group(['middleware' => ['web']], function () { Route::get('/', 'WelcomeController@index'); Route::get('articles', 'ArticlesController@index'); Route::get('articles/create', 'ArticlesController@create'); Route::get('articles/{id}', 'ArticlesController@show'); Route::post('articles', 'ArticlesController@store'); }); ``` 参考になれば幸いです。