Laravel5.2で「Session store not set on request.」が発生する時の対処法

Laravel5.2を新規でインストールして5.1以前のソースを参考にセッションを使おうとする(間接的に使うメソッドを呼び出す)と以下のようなエラーが発生することがあります。

Session store not set on request.

原因は5.2から「セッション」「CSRFトークン」「Cookie暗号化」の機能が「web」という名前のミドルウェアグループとして別に切り出されるようになったからです。

5.1以前ではGlobalミドルウェアとして常に使用されているのでバージョンアップしても問題は発生しませんが、5.1以下で動いている以下のようなコードを5.2に持ってくるとエラーが出ます。

<inputname="account" value="{{ Input::old('account') }}">

で、どうすればいいかというと5.2の作法では「web」ミドルウェアをrouteに適用します(手動でglobalミドルウェアに登録してもいい)。

Route::group(['middleware' => ['web']], function () {
    // この中に routes.php の内容を書く
});

何故このようなことになっているかというと、「web」以外に「api」のミドルウェアグループが追加されたので、今まで標準適用されていた機能を切り出して、ウェブアプリかAPIアプリに応じて必要な機能を選択できるようになったのでしょう。

Laravel 5.2 – HTTP Middleware #Middleware Groups