Symfony2-получить текущий URL или маршрут в шаблоне TWIG?

мой маршрут составляет

admin:
      path:     /admin/
      defaults: { _controller: CatalogWebBundle:Admin:admin }

Как я могу получить имя маршрута в шаблоне PHP ?

4 ответов


чтобы получить текущий URL

$request->getRequestUri(); или app.request.uri

что касается самого маршрута, лучше всего ввести его в качестве параметра в контроллер, см. статье. Вы могли бы использовать $request->attributes->get('_route') или app.request.attributes.get('_route') но это не так надежно, например не будет работать с форвардами как вы пересылаете на контроллер, а не на путь. И это действительно только предназначен для отладки в соответствии с Fabien (@fabpot), создатель!--10-->, поэтому я бы не стал полагаться на него для будущих обновлений.

Sidenote

не забудьте избежать $request->get() в любое время вы можете, так нет $request->get('_route') как я видел в некоторых ответах на подобные вопросы

Если вам не нужна гибкость в контроллерах, лучше явно получить параметры запроса из соответствующего общедоступного свойства вместо этого (атрибуты, запрос, запрос)

причина в том, что он будет выглядеть в указанных публичных свойствах (атрибуты, запрос и запрос), а не только один (атрибуты), что делает его намного медленнее


не очень хорошо делать прямо в ветке, но вы все равно можете сделать. Лучший способ передать его в качестве аргумента от контроллера.

получить параметры маршрута в Twig.

{{ app.request.attributes.get('_route_params') }}

и

получает имя всего пакета в Twig.

{{ app.request.attributes.get("_controller") }}

получить название маршрута в веточке.

{{ app.request.attributes.get('_route') }}

чтобы получить имя маршрута в Symfony2 введите следующий фрагмент кода

$request = $this->container->get('request');
$routeName = $request->get('_route');

чтобы получить URL в Symfony2,

$request = $this->container->get('request');
$routeURL = $request->getRequestUri();

добавив, что в некоторых случаях app.request.uri не возвращает url текущей страницы.

пример: в шаблоне страницы вы вызываете контроллер через:

{{ render(controller('AppBundle:MyController:myBlock')) }}

и myBlockAction, вы визуализируете другой шаблон, скажем block.html.twig.

вызов app.request.uri С block.html.twig появится что-то вроде:

http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock

если вы хотите получить абсолютный URL-адрес страницы внутри block.html.twig, вы можете собрать его из php $_SERVER переменные:

{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ 
   app.request.server.get('SERVER_NAME') ~ 
   app.request.server.get('PHP_SELF') }}

вы также можете добавить QUERY_STRING при необходимости.