Я хочу получить имя текущего маршрута I в классе промежуточного программного обеспечения. Ранее (в Слим 2. *) вы могли бы принести текущий маршрут как так:Slim 3 получить текущий маршрут в промежуточном программном обеспечении
$route = $this->app->router->getCurrentRoute();
Но эта функция была удалена в версии 3.0 Слим. Я нашел следующий код в __invoke
методом 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');
}
Это указывает на то, что текущий маршрут хранится в качестве атрибута routeInfo
в Request
. Но кажется, что мой пользовательский класс промежуточного слоя вызывается до того, как атрибут установлен (методом $this->dispatchRouterAndPrepareRoute($request, $router);
). Потому что вызов $request->getAttribute('routeInfo')
разрешается до NULL
.
Так что мой вопрос; как я могу получить текущий маршрут (или название маршрута) из функции/класса промежуточного программного обеспечения?
Или мне нужно просто скопировать код выше с Slim\App
?
У меня также возникли проблемы с получением текущего маршрута в промежуточном программном обеспечении. Я установил '' defineRouteBeforeAppMiddleware '=> 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()' после объявления маршрута. –