ミドルウェアクラスで現在の私のルートの名前を取得したいと思います。スリム3ミドルウェアで現在のルートを取得
$route = $this->app->router->getCurrentRoute();
をしかし、この機能は、スリムの3.0バージョンでは削除されました。以前は(スリム2に*)あなたはそうのような現在のルートを取得することができます。私はSlim\App
の__invoke
方法に次のコードを見つけた:これは、現在のルートはRequest
で属性routeInfo
として格納されていることを示し
// Get the route info
$routeInfo = $request->getAttribute('routeInfo');
/** @var \Slim\Interfaces\RouterInterface $router */
$router = $this->container->get('router');
// If router hasn't been dispatched or the URI changed then dispatch
if (null === $routeInfo || ($routeInfo['request'] !== [$request->getMethod(), (string) $request->getUri()])) {
$request = $this->dispatchRouterAndPrepareRoute($request, $router);
$routeInfo = $request->getAttribute('routeInfo');
}
。しかし、私のカスタムミドルウェアクラスは、属性が設定される前に($this->dispatchRouterAndPrepareRoute($request, $router);
メソッドによって)呼び出されたようです。 $request->getAttribute('routeInfo')
はNULL
に解決されるためです。
私の質問です。ミドルウェア機能/クラスから現在のルート(またはルートの名前)を取得するにはどうすればよいですか?
また、上記のコードをSlim\App
からコピーするだけですか?
ミドルウェアで現在のルートを取得するのにも問題があります。私は '' routesRequestBeforeAppMiddleware '=> true'を設定しました。 '$ route = $ request-> getAttribute(' route ');'オブジェクトを取得しましたが(Slim \ Route)、 '$ routeName = $ route-> getName(); 'nullが返されます。誰でも何か提案がありますか? –
'setName()'メソッドでルート名を付けましたか? (https://www.slimframework.com/docs/objects/router.html#route-names) –
Thx @Wessel。問題は、ルートを宣言した後に 'setName()'メソッドが見つからないという問題でした。 –