Symfony2 получить имя маршрута из URL
ok вы можете получить текущее имя маршрута с app.request.attributes.get('_route')
но невозможно получить из url-адреса ?
что-то вроде app.request.attributes.get('/about')
?
3 ответов
можно использовать Router
класс/сервис для этого:
public function indexAction()
{
$router = $this->get('router');
$route = $router->match('/foo')['_route'];
}
дополнительная информация в документация
недавно я обнаружил, что метод match () использует метод HTTP текущего запроса для соответствия запросу. Поэтому, если вы делаете запрос PUT, например, он попытается сопоставить URL-адрес, который вы дали с методом PUT, что приведет к исключению MethodNotAllowedException (например, получение референта).
чтобы избежать этого, я использую этот метод:
// set context with GET method of the previous ajax call
$context = $this->get('router')->getContext();
$currentMethod = $context->getMethod();
$context->setMethod('GET');
// match route
$routeParams = $this->get('router')->match($routePath);
// set back original http method
$context->setMethod($currentMethod);
однако может быть неверно, что это всегда запрос GET. Это может быть запрос POST в вашем случае.
Я отправил эту проблему в сообщество Symfony. Посмотрим, что они предложат.
Я получал MethodNotAllowed даже с методами сопоставления при использовании абсолютных путей Я работал вокруг него, как это
$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
$route = $this->container->get('router')->match($ref)['_route'];