Двигатель шаблонов ветки: получить текущий URL -адрес
Вопрос
Как я могу получить текущий URL из шаблона ветки?
Я использую Twig с PHP, без какой -либо другой структуры.
Решение
Поиск текущего URL
Текущий URL -адрес поставляется вашим веб -сервером и записывается на $_SERVER
супер-глобальный. Запустите этот маленький сценарий, <?php echo '<pre>'; print_r($_SERVER);
, через ваш сервер и корни, чтобы найти значение (ы), которые вы ищете.
Связанные вопросы по этому вопросу:
Руководство PHP описывает природу доступных $_SERVER
ценности здесь.
Получение URL в ветке
После того, как у вас есть URL, вам нужно передать его как переменную шаблона при вызове render(...)
На экземпляре шаблона ветки. Например, вы можете кодировать это.
$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 }}
синтаксис.
Другие советы
Следующие работы в Silex и, безусловно, в Symfony2, поскольку они делятся классом запроса (я не тестировал):
{{ 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'];
Затем в своем шаблоне ветки вы можете сделать
{{ app.current_url }}
Дайте мне знать, какова линия ботома этого метода.