I want to get the name of the current I route in a middleware class. Previously (in Slim 2.*) you could fetch the current route like so:
$route = $this->app->router->getCurrentRoute();
But this function has been removed in the 3.0 version of Slim. I've found the following code in the __invoke
method of Slim\App
:
// 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 indicates that the current route is stored as the attribute routeInfo
in the Request
. But it seems that my custom middleware class is called before the attribute is set (by the $this->dispatchRouterAndPrepareRoute($request, $router);
method). Because calling $request->getAttribute('routeInfo')
resolves to NULL
.
So my question is; how can I get the current route (or the name of the route) from a middleware function/class?
Or should I just copy the piece of code above from Slim\App
?