Как мне узнать текущий маршрут в Symfony 2?
Например, routing.yml
:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
Как я могу получить это somePage
значение?
php
symfony
routing
symfony-routing
IlyaDoroshin
источник
источник
С веточкой:
{{ app.request.attributes.get('_route') }}
источник
<body class="{{ app.request.get('_route') | replace({'_' : '-'}) }}">
для подачи странички css :)Я думаю, что это самый простой способ сделать это:
источник
{% render "SomeBundle:SomeController:someAction" %}
, где вы снова получите значение _internal.Symfony 2.0-2.1
Используйте это:
Это не даст вам
_internal
.Обновление для Symfony 2.2+: это не работает, начиная с Symfony 2.2+. Я открыл ошибку, и ответ был "по замыслу". Если вы хотите получить маршрут в дополнительном действии, вы должны передать его в качестве аргумента
И ваш контроллер:
источник
$route['_route']
кажется проблематичным, но, возможно, это не Symfony, о котором говорит dev. Поваренная книга не упоминает о_route
о$router->match()
выходе ..$router->match()
говорится: «массив @return - массив параметров», который кажется очень внутренним. Я не хочу на это полагаться, но сейчас, похоже, это единственное жизнеспособное решение при работе с подзапросами.Не существует решения, которое работает для всех случаев использования. Если вы используете метод $ request-> get ('_ route') или его варианты, он вернет _internal для случаев, когда переадресация имела место.
Если вам нужно решение, которое работает даже с переадресацией, вы должны использовать новую службу RequestStack, которая появилась в 2.4, но это нарушит поддержку ESI :
Из этого вы можете сделать расширение ветки, если вам это нужно в шаблонах.
источник
_route
это не путь и никогда не было . По словам Фабьена, который всегда создавал Symfony, он всегда предназначался для отладки . Это ненадежно, так как не будет работать с такими вещами, как переадресация и другие прямые вызовы контроллеров, такие как частичный рендеринг.Вам нужно ввести название вашего маршрута в качестве параметра в вашем контроллере, смотрите документацию здесь
Кроме того, пожалуйста, никогда не используйте,
$request->get('');
если вам не нужна гибкость, это намного медленнее, чем использование get для конкретного пакета свойств, который вам нужен (атрибуты, запрос или запрос), поэтому$request->attributes->get('_route');
в этом случае.источник
Вы можете получить имя маршрута из объекта запроса из контроллера.
источник
Все, что я получаю от этого
_internal
Я получаю имя маршрута изнутри контроллера с помощью
$this->getRequest()->get('_route').
даже кода, предлагаемого Tuxedo25 возвращает_internal
Этот код выполняется в так называемом «Компоненте» в Symfony 1.X; Не контроллер страницы, а часть страницы, которая нуждается в некоторой логике.
Эквивалентный код в Symfony 1.X:
sfContext::getInstance()->getRouting()->getCurrentRouteName();
источник
$view['request']->getParameter('_route');
{% render... %}
звонки сstandalone=true
. При включенном кэшировании (AppCache.php или varnish with ESI) это приведет к тому, что автономные представления будут запрашиваться с отдельным HTTP-запросом (именно здесь начинается маршрут_internal
), чтобы ro мог быть независимо кэширован.В Symfony 3.3 я использовал этот метод и работал нормально.
У меня есть 4 маршрута, как
И только одна строка делает активный класс для всех маршрутов.
источник
Чтобы получить текущий маршрут на основе URL (более надежный в случае пересылки):
источник
В Symfony 4.2.7 я могу реализовать следующее в своем шаблоне ветки, который отображает имя пользовательского маршрута, которое я определил в своих контроллерах.
В index.html.twig
В моем контроллере
Результат выводит «article_list» на нужную страницу в моем браузере.
источник
Для тех, кому нужен текущий маршрут для Symfony 3, это то, что я использую
источник
если вы хотите получить имя маршрута в вашем контроллере, то вам нужно внедрить запрос (вместо того, чтобы получать из контейнера из-за UPGRADE Symfony и затем вызывать get ('_ route').
если вы хотите получить название маршрута в ветке, чем вы должны получить его как
источник
$request->get()
напрямую, потому что это медленно: github.com/symfony/http-foundation/blob/2.8/Request.php#L712