Twig templates engine: получить текущий url

Как получить текущий URL-адрес из шаблона Twig?

Я использую Twig с PHP, без каких-либо других фреймворков.

Поиск текущего URL-адреса

Текущий URL-адрес предоставляется вашим веб-сервером и записывается в супер-глобальный $_SERVER . Запустите этот небольшой скрипт, <?php echo '<pre>'; print_r($_SERVER); <?php echo '<pre>'; print_r($_SERVER); , через ваш сервер и корень, чтобы найти значения, которые вы ищете.

Связанные вопросы по этому вопросу:

  • получение текущего URL-адреса
  • PHP Определение текущего URL-адреса
  • Как получить URL текущей страницы в PHP

В руководстве по PHP описывается характер доступных значений $_SERVER здесь .

Получение URL-адреса в TWIG

После URL-адреса вам нужно передать его как переменную шаблона при вызове render(...) в экземпляре шаблона Twig. Например, вы можете закодировать это.

 $current_url = // figure out what the current url is // pass the current URL as a variable to the template echo $template->render(array('current_url' => $current_url)); 

Чтобы использовать переменную в шаблоне, используйте синтаксис {{ variable_name }} .

  • Основная документация Twig разработчика
  • Дизайнерская документация Twig для использования переменных .

Следующие действия выполняются в Silex и, безусловно, в Symfony2, поскольку они разделяют класс Request (я не тестировал):

 {{ app.request.getRequestUri() }} 

Перейти http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html

или: {{ app.request.getUri() }} для полного Uri.

Помните, что в настоящий момент вы должны использовать Symfony\Component\HttpFoundation\RequestStack .

См. http://symfony.com/blog/new-in-symfony-2-4-the-request-stack .

Начиная с Symfony 2.4 наилучшей практикой является никогда не вводить службу запроса, а вместо этого вводить службу request_stack […]

Поэтому в приложении Silex это может быть достигнуто с помощью:

 app.request_stack.getCurrentRequest.getUri 

Здесь что-то я нашел, чтобы сделать его общим с платформой sliex. Я думаю, что мое решение не идеально, но оно выполняется.

в вашем PHP-коде добавьте этот код:

 $app = new Silex\Application(); // add the current url to the app object. $app['current_url'] = $_SERVER['REQUEST_URI']; 

Затем в вашем шаблоне Twig вы можете сделать

 {{ app.current_url }} 

Дайте мне знать, какова линия бота этого метода.