Voglio ottenere il nome del percorso corrente in una classe middleware. In precedenza (in Slim 2. *) si può prendere il percorso corrente in questo modo:Slim 3 ottiene il percorso corrente nel middleware
$route = $this->app->router->getCurrentRoute();
Ma questa funzione è stata rimossa nella versione 3.0 di Slim. Ho trovato il seguente codice nel metodo di Slim\App
__invoke
:
// 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');
}
Ciò indica che il percorso corrente viene memorizzata come attributo routeInfo
nel Request
. Ma sembra che la mia classe middleware personalizzata venga chiamata prima che l'attributo sia impostato (con il metodo $this->dispatchRouterAndPrepareRoute($request, $router);
). Perché chiamare $request->getAttribute('routeInfo')
si risolve in NULL
.
Quindi la mia domanda è; come posso ottenere il percorso corrente (o il nome del percorso) da una funzione/classe middleware?
O dovrei semplicemente copiare il codice di cui sopra da Slim\App
?
Ho anche problemi a ottenere il percorso corrente nel middleware. Ho impostato ''defineRouteBeforeAppMiddleware' => true' e quando eseguo' $ route = $ request-> getAttribute ('route'); 'Ricevo un oggetto (Slim \ Route), ma quando faccio' $ routeName = $ route-> getName(); 'Ottengo null. Qualcuno ha qualche suggerimento? –
Hai chiamato il percorso tramite il metodo 'setName()'? (https://www.slimframework.com/docs/objects/router.html#route-names) –
Thx @Wessel. Il problema era il metodo 'setName()' mancante dopo aver dichiarato il percorso. –