で現在のルート名を取得できますがapp.request.attributes.get('_route')
、URLから取得することはできませんか?
のようなものapp.request.attributes.get('/about')
?
で現在のルート名を取得できますがapp.request.attributes.get('_route')
、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コミュニティに送信しました。彼らが何を提案しているか見てみましょう。
絶対パスを使用すると、メソッドが一致してもMethodNotAllowedが取得されていました。このように回避しました。
$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
$route = $this->container->get('router')->match($ref)['_route'];