Symfony2从URL获取路由名称

时间:2013-03-27 07:37:29

标签: symfony

好的,您可以使用app.request.attributes.get('_route')获取当前路线名称,但是无法从网址获取?

app.request.attributes.get('/about')

之类的东西

3 个答案:

答案 0 :(得分:15)

您可以使用Router课程/服务:

public function indexAction()
{
    $router = $this->get('router');
    $route = $router->match('/foo')['_route'];
}

the documentation

中的更多信息

答案 1 :(得分:7)

我最近发现match()方法使用当前请求的HTTP METHOD来匹配请求。因此,如果您正在执行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社区。让我们看看他们的建议。

答案 2 :(得分:5)

使用绝对路径时,即使使用匹配方法,我也得到了MethodNotAllowed 我像这样工作

$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
$route = $this->container->get('router')->match($ref)['_route'];