好的,您可以使用app.request.attributes.get('_route')
获取当前的路线名称,但是无法从网址获取路线名称?Symfony2从URL
类似app.request.attributes.get('/about')
?
好的,您可以使用app.request.attributes.get('_route')
获取当前的路线名称,但是无法从网址获取路线名称?Symfony2从URL
类似app.request.attributes.get('/about')
?
您可以使用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社区。让我们看看他们的建议。
你可以强制'HEAD'方法,而不是'GET'。如果您在缓存文件中检查“appDevUrlMatcher.php”或“appProdUrlMatcher.php”,您将看到总是允许所有路由使用“HEAD”方法。有了这个,你将不再需要估计使用哪种方法来匹配引用者。 – Elorfin 2013-11-26 12:22:39
我得到了MethodNotAllowed即使使用绝对路径 我工作围绕它像这样
$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH));
$route = $this->container->get('router')->match($ref)['_route'];
它的工作THX当匹配方法:=) – altore 2013-03-27 07:51:05
我用这一点,但它是无效的。 Symfony中的Route服务具有当前请求的状态。为了获得真正的路由,你应该设置使用HTTP方法创建的上下文,该方法可以是POST,PATCH或PUT或其他。 – 2017-04-04 06:35:14