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メソッドを使用してリクエストを照合することを発見しました。したがって、たとえば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 に答える