Взаимодействие Twig и Symfony framework. Глобальные переменные(Урок 8.2)
Мы уже знакомы с шаблонизатором twig, умеем писать на нем разметку и подключать внешние файлы(assets). Осталось только рассмотреть некоторые аспекты взаимодействия из Symfony framework.
Во-первых, для того, чтобы отобразить шаблон, в контроллере нужно вызвать метод render:
// src/Acme/ArticleBundle/Controller/ArticleController.php
class ArticleController extends Controller
{
public function recentArticlesAction($max = 3)
{
$articles = ...;
return $this->render(
'AcmeArticleBundle:Article:recentList.html.twig',
array('articles' => $articles)
);
}
}
Массив (второй аргумент) задает список доступных с шаблона переменных.Кроме того есть возможность работать с глобальными (как для php-скриптов) переменными.
Доступные глобальные переменные:
-
app.security
- The security context. -
app.user
- Объект пользователя. -
app.request
- Объект запроса. -
app.session
- Объект сессии. -
app.environment
- Текущее окружение (dev, prod, и т.д.). -
app.debug
- True если debug сборка. False если продакшн.
Например, чтобы узнать, с какого скрипта вызвали рендер шаблона (или его фрагмента), необязательно передавать его имя. Достаточно обратиться до глобального значения (глобальной переменной, или метода) (в данном случае мы получим роут, с которого был вызван шаблон):
{% if app.request.attributes.get('_route') == "route_name" %}
...
{% endif %}
Также можем получить параметры:
{{ app.request.attributes.get('_route_params') }}
Также можно очень просто получить параметры пользователя, обращаться до переменных сессии и т.д.Кроме "стандартных" глобальных переменных есть возможность добавить свои. Для этого нужно модифицировать файл конфигурации:
# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x
Теперь эта переменная будет доступна со всех шаблонов:
<p>The google tracking code is: {{ ga_tracking }}</p>