Конспект Twig (читшит)
Категория: / DEV Блог
/ PHP (LAMP)
Twig - современный шаблонизатор для PHP, написанный автором фреймворка symfony Фабиеном Потенсером.
Синтаксис twig сходен с шаблониами Django. При первом проходе шаблоны компилируются в PHP классы, затем просто инкюдятся.
Базовый синтаксис:
{{ сказать что-то }}
{% сделать что-то %}
Комментарий
Переменные, вывод
Глобальные
Присвоение
Выражения
Результаты выражений никогда не экранируются
Длинный текст
Управляющие структуры
if , elseif, else, for
Условия: even, odd, defined, sameas, null, divisibleby, constant, empty
Цикл
Фильтры
Один или несколько фильтров разделенных `|`
Полный список: date, format, replace, url_encode, json_encode, title, capitalize, upper,
lower, striptags, join, reverse, length, sort, merge, default, keys, escape, e
Функции
Встроенные: range, cycle, constant, random, attribute, block, parent, dump, date
Экранирование
Экран для твиготэгов `raw`
Для html - `htmlspecialchars`
Включения (инклюды)
Песочница
Сэндбокс необходимо подключать для непроверенных шаблонов,
функционал которых будет ограничен системой
Наследование
Механизм блоков - плейсхолдеры в родительском шаблоне, которые могут быть переопределены в дочернем.
base.html.twig
Директива extends указывает на наследуемый шаблон
Дочерний шаблон может содержать только переопределяемые блоки,
использование html вне блоков вызовет ошибку.
Для вывода контента родительского блока, используется функция `parent()`
Подробнее о блоках
Переводы i18n
Полная Документация twig на официальном сайте проекта.
Синтаксис twig сходен с шаблониами Django. При первом проходе шаблоны компилируются в PHP классы, затем просто инкюдятся.
Базовый синтаксис:
{{ сказать что-то }}
{% сделать что-то %}
Комментарий
{# A comment #}
Переменные, вывод
{{ sitename }}
{{ user.name }}
{{ foo['bar'] }}
Глобальные
{{ _context }} - текущий контекст
{{ _self }} - этот шаблон
{{ _charset }} - кодировка
app.security - Контекст безопасности
app.user - Текущий пользователь
app.request - Запрос
app.session - Сессия
app.environment - Текущее окружение (dev, prod)
app.debug - Флаг отладки (boolean)
Присвоение
{% set foo = 'bar' %}
{% set foo = [1,2] %} - массив
{% set foo = {'foo':'bar'} %} - массив с ключами
{% set foo = bar ~'baz' %} - с другой переменной
Выражения
Результаты выражений никогда не экранируются
{{ foo ? "Twig<br />" : "<br />Twig" }} {# не экранируется #}
{% set text = "Twig<br />" %}
{{ foo ? text : "<br />Twig" }} {# экранируется #}
{% set text = "Twig<br />" %}
{{ foo ? text|raw : "<br />Twig" }} {# не экранируется #}
{% set text = "Twig<br />" %}
{{ foo ? text|escape : "<br />Twig" }} {# не экранируется #}
Длинный текст
{% set message %}
This is an error message.
{% endset %}
Управляющие структуры
if , elseif, else, for
Условия: even, odd, defined, sameas, null, divisibleby, constant, empty
{% if page is defined %}
<h1>{{ pagetitle }}</h1>
{% endif %}
{% if users|length > 0 %}
{% for user in users %}
{{ user.username|e }}
{% endfor %}
{% endif %}
Цикл
{% for user in users %}
<li>{{ user.username }}</li>
{% else %}
no users
{% endfor %}
{% for i in 0..10 %}
<div class="{{ cycle(['odd', 'even'], i) }}">{{ i }}</div>
{% endfor %}
Фильтры
Один или несколько фильтров разделенных `|`
Полный список: date, format, replace, url_encode, json_encode, title, capitalize, upper,
lower, striptags, join, reverse, length, sort, merge, default, keys, escape, e
{{ name|striptags|title }}
{{ list|join(‘, ‘)|title }}
{% filter upper %}
This text becomes uppercase
{% endfilter %}
Функции
Встроенные: range, cycle, constant, random, attribute, block, parent, dump, date
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
Экранирование
Экран для твиготэгов `raw`
{{ '{{twigvariable}}'| raw }}
Для html - `htmlspecialchars`
{{'<script>alert("script")</script>' | escape}}
{% autoescape 'html' %}
{{ var }}
{{ var|raw }} {# var won't be escaped #}
{{ var|escape }} {# var won't be double-escaped #}
{% endautoescape %}
Включения (инклюды)
{% include 'relative/to/template/root/mypage.html' %}
{% include 'mypage.html' with {'key': 'value'} %} - с передачей переменных
Песочница
Сэндбокс необходимо подключать для непроверенных шаблонов,
функционал которых будет ограничен системой
{% sandbox %}
{% include 'user.html' %}
{% endsandbox %}
Наследование
Механизм блоков - плейсхолдеры в родительском шаблоне, которые могут быть переопределены в дочернем.
base.html.twig
<html>
<body>
<div id="content">{% block content %}{% endblock %}</div>
</body>
</html>
Директива extends указывает на наследуемый шаблон
Дочерний шаблон может содержать только переопределяемые блоки,
использование html вне блоков вызовет ошибку.
{% extends "base.html.twig" %} {# <-- наследуем #}
{% block content %}
<h1>Index</h1>
<p class="important">Переопределенный блок</p>
{{ parent() }}
{% endblock %}
Для вывода контента родительского блока, используется функция `parent()`
Подробнее о блоках
Переводы i18n
{%trans “Hello world!” %}
Для длинного текста
{% trans %}
Hello {{user.name}}
{% endtrans %}
{% trans %}
Hey {{ name }}, I have one apple.
{% plural apple_count %}
Hey {{ name }}, I have {{ count }} apples.
{% endtrans %}
Полная Документация twig на официальном сайте проекта.
не экстендятся переменные с контекстом.
ошибку не выдает. пути правильные
в чем может быть причина?