ミドルウェアへデータを渡す方法
一通り、ミドルウェアが利用できるようになったところで、少し応用します。これまでの解説で、handle()メソッドの第1引数であるRequestインスタンスを使えば、ミドルウェア自身がリクエスト処理に関するさまざまな情報を取得できることは、理解してもらえたと思います。
一方、このままではRequestインスタンスから取得できない情報は利用できません。例えば、リスト1でIPアドレスやルーティングパターンと一緒にそのルーティングパターンが示す機能の重要度も記録したいとします。これは、Requestインスタンスからは取得できません。
そこで、ミドルウェアを設定する際にパラメータをミドルウェアに渡すことができます。その場合、ミドルウェアの設定コードは以下のようになります。
Route::get("/chap5/middlewareTest", …)->middleware("recordipaddress:中");
つまり、ミドルウェア名の次に:を記述し、続いてパラメータを記述します。これらを1つの文字列として引数に渡します。さらに、複数のパラメータを渡したい場合は、以下のようなコードとなります。
Route::get("/chap5/middlewareTest", …)->middleware("recordipaddress:中,通常管理者");
:以降にカンマ区切りで複数並べたものを1つの文字列として引数に渡します。構文としてまとめると、以下のようになります。
Route::get(…)->middleware("ミドルウェア名:パラメータ,パラメータ,…");
このようにして設定されたパラメータをミドルウェアで受け取るには、handle()メソッドの引数を利用します。handle()は第1、第2引数があらかじめ決まれていますが、パラメータを受け取るのを前提としてミドルウェアを作成する場合は第3引数以降に引数を記述します。例えば、以下のコードになります。
public function handle(Request $request, Closure $next, $importance) { : return $next($request); }
この場合、先の例で行くと、引数$importanceには「中」という文字列が格納された状態でこのミドルウェアの処理が走ることになります。
まとめ
今回は、リクエスト処理の前後に処理を挿入できる仕組みとしてミドルウェアを紹介しました。
次回は、Laravelのサービスコンテナとサービスプロバイダを紹介します。これらの仕組みを使うことで、Laravel内でのクラス間の依存関係をLaravelに任せることができます。