好的,您可以使用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