2012-02-18 7 views
17

Как я могу получить текущий URL-адрес из шаблона Twig?Twig templates engine: получить текущий url

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

+0

Почему бы не передать текущий URL-адрес в качестве переменной шаблона? Или вы можете написать тег шаблона, который выводит URL-адрес. –

ответ

6

Поиск текущего URL

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

Похожие вопросы по этой теме:

The PHP manual describes the nature of the available $_SERVER values here.

Получение URL в веточку

После вас есть 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 }}.

+0

Интересно, есть ли какой-либо внутренний инструмент (метод переменной ot), чтобы получить URL-адрес от Twig? – nKognito

+0

Вы можете найти код, уже написанный для этой цели, но получение текущего URL-адреса не входит в рамки механизма шаблонов, поэтому я очень сомневаюсь, что у Twig есть что-то встроенное. Я, конечно, ничего не нашел. – erisco

0

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

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

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

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

{{ app.current_url }} 

Позвольте мне знать, что является ботом линия этого метода.

25

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

{{ app.request.getRequestUri() }} 
+5

'{{app.request.requestUri}}' – eightyfive

+0

Еще лучше, да. – neemzy

+1

Это устарело, его не следует использовать. https://github.com/silexphp/Silex/issues/1257#issuecomment-141058724 – Tieme

2

Помните, что в настоящий момент вы должны использовать 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