Laravel 5 の Global Middleware ではルートの名前がとれない?

Laravel

※ ここで「ルートの名前」と言っているのは名前付きルートによる名前のことです。

Laravel 5 には Middleware という機能が組み込まれていて、コントローラの処理が実行される前にいろいろな処理を追加することができます(レスポンス送信後に実行する処理も記述可能)。従来デフォルトで組み込まれていた各フィルター処理はこちらの機能に移動されています。

Middlewareは登録の仕方によって、2つの種類があります。

  1. Global Middleware
    • 作成したMiddlewareを app/Http/Kernel.php$middlewareプロパティに登録すると、HTTPリクエスト毎に常に実行されるようになります。
  2. ルートに割り当てる Middleware
    • 作成したMiddlewareを app/Http/Kernel.php$routeMiddlewareプロパティに登録した上で、特定のルートに対して別途割り当てて使用します。

今回、Middlewareの中でアクセスされたURLを判定するため、ルート名(名前付きルートによる名前)を取得しようとしたのですが、Global Middleware にした場合は取得できませんでした。どうやらこちらはルート名が決定される前の段階で実行されるようです。2であれば取得できたのですが、Middleware自体は常に実行してくれた方がよい場合には不便に感じました。

解決策を挙げるとすると、例えば

  1. Global Middleware として作成し、ルート名ではなく元のURLで判別する。
    • 当然ながら、クライアントからアクセスされた生のURLであれば取得することができます。
  2. あきらめて ルートに割り当てる Middleware として作成し、この Middleware を特定のルートに割り当てる。
  3. 'router.matched' というイベントに対するリスナーとして処理を登録する。
    • こちらのイベントであればルート名が取れます。

といったあたりでしょうか。

それとも、何かよいMiddlewareの書き方があるのでしょうか?

最終更新日: 2015-2-24

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*