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'];