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
при необходимости.