2013-03-27 2 views

답변

15

당신은이에 대한 Router 클래스/서비스를 사용할 수 있습니다

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

더 많은 정보

+0

처럼 주위에 일을 절대 경로 사용할 때 방법을 일치로 MethodNotAllowed을 얻고 있었다 : =) – altore

+0

I이 사용을하지만이 유효하지 않습니다. Symfony의 Route 서비스는 현재 요청 상태입니다. 실제 경로를 얻으려면 POST, PATCH 또는 PUT 또는 다른 HTTP 메소드로 요청에서 생성 된 컨텍스트를 설정해야합니다. –

7

the documentation에 나는 최근 경기() 메소드하기 위해 현재 요청의 HTTP 방법을 사용하는 것을 발견 요청을 일치 시키십시오. 따라서 예를 들어 PUT 요청을하는 경우 PUT 메서드로 지정한 URL과 일치하여 MethodNotAllowedException 예외가 발생합니다 (예 : 리퍼러 가져 오기).

내가이 해결 방법을 사용하고이를 방지하려면, 항상 GET 요청 있다는 사실이되지 않을 수 있습니다 그러나

// 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); 

. 그것은 귀하의 경우에 POST 요청 일 수 있습니다.

이 문제는 Symfony 커뮤니티에 전달되었습니다. 그들이 제안하는 것을 보자.

+0

'HEAD' 메쏘드 대신'GET'을 강요 할 수 있습니다. 캐시 파일에서'appDevUrlMatcher.php' 또는'appProdUrlMatcher.php'를 체크하면,'HEAD' 메쏘드는 항상 모든 라우트에 허용됩니다. 이를 통해 더 이상 referer와 일치하는 메소드를 추정 할 필요가 없습니다. – Elorfin

3

나는 심지어 내가이 일 THX의이

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