Intereting Posts
Должны ли мы всегда связывать наши операторы SQL? Левый Присоединение первичного ключа к нормальному столбцу вызывает хаос Когда следует использовать closeCursor () для операторов PDO? PHP: преобразовать строку пары значений, разделенных запятыми, в массив mysql заменяет элементы с номером строки Как получить байтовые значения строки в PHP? Разбиение страницы на пользовательский wp_query в WordPress занимает 404 страницы ошибок В студии Zend, как определить тип переменной, так что у меня автозаполнение? Как получить реальный IP-адрес от посетителя? Laravel SwiftMailer: ожидаемый код ответа 250, но получил код «530», с сообщением «530-5.5.1 Требуется аутентификация Положение заголовка не работает должным образом Лучшая практика: импортируйте файл mySQL в PHP; разделенные запросы Могу ли я вручную указать на профилировщике xdebug, чтобы начать профилирование в определенном месте? PHP получает последние 3 элемента массива Как получить данные из параметра модуля в joomla

Как получить текущий маршрут в Symfony 2?

Как получить текущий маршрут в Symfony 2?

Например, routing.yml :

 somePage: pattern: /page/ defaults: { _controller: "AcmeBundle:Test:index" } 

Как я могу получить это значение somePage ?

    Из чего-то, что является ContainerAware (например, контроллер):

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

    С Twig: {{ app.request.attributes.get('_route') }}

    Я думаю, что это самый простой способ сделать это:

     class MyController extends Controller { public function myAction($_route) { var_dump($_route); } ..... 

    Symfony 2.0-2.1
    Использовать это:

      $router = $this->get("router"); $route = $router->match($this->getRequest()->getPathInfo()); var_dump($route['_route']); 

    Это не даст вам воли.

    Обновление для Symfony 2.2+: это не работает, начиная с Symfony 2.2+. Я открыл ошибку, и ответ был «по дизайну». Если вы хотите получить маршрут в под-действие, вы должны передать его в качестве аргумента

     {{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }} 

    И ваш контроллер:

     public function menuAction($route) { ... } 

    Нет решения, которое работает для всех случаев использования. Если вы используете метод $ request-> get ('_ route') или его варианты, он вернет '_internal' для случаев, когда была выполнена пересылка.

    Если вам нужно решение, которое работает даже с пересылкой, вам нужно использовать новую службу RequestStack, которая поступит в 2.4, но это нарушит поддержку ESI :

     $requestStack = $container->get('request_stack'); $masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI if ($masterRequest) { echo $masterRequest->attributes->get('_route'); } 

    Вы можете сделать расширение ветки из этого, если вам это нужно в шаблонах.

     $request->attributes->get('_route'); 

    Вы можете получить имя маршрута из объекта запроса из контроллера.

    _route – это не путь и никогда не был . Это всегда было предназначено для целей отладки в соответствии с Фабиеном, который создал Symfony. Это ненадежно, поскольку оно не будет работать с такими вещами, как переадресация и другие прямые вызовы контроллерам, такие как частичный рендеринг.

    Вам нужно ввести название своего маршрута в качестве параметра в своем контроллере, см. Документ здесь

    Кроме того, никогда не используйте $request->get(''); если вам не нужна гибкость, это медленнее, чем использование того, что вам нужно (атрибуты, запрос или запрос), так что $request->attributes->get('_route'); в этом случае.

    Все, что я получаю от этого, – это _internal

    Я получаю имя маршрута внутри контроллера с помощью $this->getRequest()->get('_route'). Даже код tuxedo25 предложил возврат _internal

    Этот код выполняется в так называемом «Компонента» в Symfony 1.X; Не контроллер страницы, а часть страницы, которая требует некоторой логики.

    Эквивалентным кодом в Symfony 1.X является: sfContext::getInstance()->getRouting()->getCurrentRouteName();

    С Symfony 3.3 я использовал этот метод и отлично работал.

    У меня есть 4 маршрута, например

    admin_category_index, admin_category_detail, admin_category_create, admin_category_update

    И только одна строка делает активный класс для всех маршрутов.

     <li {% if app.request.get('_route') starts with 'admin_category' %} class="active"{% endif %}> <a href="{{ path('admin_category_index') }}">Product Categoires</a> </li> 

    Для тех, кому нужен текущий маршрут для Symfony 3, это то, что я использую

     <?php $request = $this->container->get('router.request_context'); //Assuming you are on user registration page like https://www.yoursite.com/user/registration $scheme = $request->getScheme(); //This will return https $host = $request->getHost(); // This will return www.yoursite.com $route = $request->getPathInfo(); // This will return user/registration(don't forget this is registrationAction in userController ?> 

    Чтобы получить текущий маршрут на основе URL (более надежный в случае переадресации):

     public function getCurrentRoute(Request $request) { $pathInfo = $request->getPathInfo(); $routeParams = $this->router->match($pathInfo); $routeName = $routeParams['_route']; if (substr($routeName, 0, 1) === '_') { return; } unset($routeParams['_route']); $data = [ 'name' => $routeName, 'params' => $routeParams, ]; return $data; } не public function getCurrentRoute(Request $request) { $pathInfo = $request->getPathInfo(); $routeParams = $this->router->match($pathInfo); $routeName = $routeParams['_route']; if (substr($routeName, 0, 1) === '_') { return; } unset($routeParams['_route']); $data = [ 'name' => $routeName, 'params' => $routeParams, ]; return $data; } 

    если вы хотите получить имя маршрута в своем контроллере, вы должны ввести запрос (вместо того, чтобы получать из контейнера из-за Symfony UPGRADE, а не по вызову get ('_ route').

     public function indexAction(Request $request) { $routeName = $request->get('_route'); } 

    если вы хотите получить название маршрута в twig, чем вы должны получить его, как

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