2013-03-27 18 views
6

ok現在のルート名はapp.request.attributes.get('_route')で取得できますが、URLから取得することはできません。Symfony2 URLからルート名を取得

と同様のものapp.request.attributes.get('/about')

答えて

15

あなたはこのためにRouterクラス/サービスを使用することができます。

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

詳しい情報

+0

のように、その周りに働い絶対パス 使用する際の方法に一致してMethodNotAllowedを得ていた:=) – altore

+0

私はこれを使用しますが、それは有効ではありません。 symfonyのルートサービスは、現在のリクエストの状態を持っています。実際のルートを取得するには、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

'GET'ではなく' HEAD'メソッドを強制することができます。キャッシュファイルに 'appDevUrlMatcher.php'または' appProdUrlMatcher.php'をチェックすると、 'HEAD'メソッドがすべてのルートで常に許可されます。これにより、どのメソッドがリファラーと一致するかを見積もる必要がなくなりました。 – 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']; 
関連する問題