8

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

app.request.attributes.get('/about')什么?

4

3 回答 3

15

您可以Router为此使用类/服务:

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

文档中的更多信息

于 2013-03-27T07:44:59.470 回答
9

我最近发现 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 社区。让我们看看他们提出了什么建议。

于 2013-05-12T09:44:17.343 回答
6

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

$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
$route = $this->container->get('router')->match($ref)['_route'];
于 2014-01-30T13:47:10.470 回答