Chcę uzyskać nazwę bieżącej trasy I w klasie middleware. Wcześniej (w Slim 2. *) można pobrać aktualną trasę tak:Slim 3 pobierz aktualną trasę w oprogramowaniu pośrednim
$route = $this->app->router->getCurrentRoute();
Jednak funkcja ta została usunięta w wersji Slim 3.0. Znalazłem następujący kod w metodzie 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');
}
To wskazuje, że obecna trasa jest przechowywana jako atrybut routeInfo
w Request
. Wydaje się jednak, że moja niestandardowa klasa oprogramowania pośredniego jest wywoływana przed ustawieniem atrybutu (metodą $this->dispatchRouterAndPrepareRoute($request, $router);
). Ponieważ wywołanie $request->getAttribute('routeInfo')
rozwiązuje się na NULL
.
Moje pytanie brzmi; jak mogę pobrać aktualną trasę (lub nazwę trasy) z funkcji/klasy middleware?
Czy powinienem po prostu skopiować powyższy fragment kodu z Slim\App
?
Mam również problem z uzyskaniem bieżącej trasy w oprogramowaniu pośredniczącym. Ustawiłem '" determoutReadeBeforeAppMiddleware '=> true' i kiedy wykonuję '$ route = $ request-> getAttribute (' route ');' otrzymuję obiekt (Slim \ Route), ale kiedy robię '$ routeName = $ route-> getName(); 'Otrzymuję wartość null. Ktoś ma jakieś sugestie? –
Czy nazwałeś trasę za pomocą metody 'setName()'? (https://www.slimframework.com/docs/objects/router.html#route-names) –
Thx @Wessel. Problemem była brakująca metoda 'setName()' po zadeklarowaniu trasy. –