Директивы Twig
Директивы Twig представляют собой специальные конструкции языка шаблонов Twig, которые управляют логикой отображения страницы. Они позволяют выполнять условия, циклы, подключать другие шаблоны, определять блоки, наследовать шаблоны, создавать переменные и выполнять другие операции непосредственно в шаблоне.
В отличие от выражений {{ ... }}, которые выводят данные, директивы записываются внутри тегов {% ... %} и обычно не выводят никакого текста самостоятельно. Их задача заключается в управлении процессом генерации HTML.
Например:
{% if user %}
<p>Здравствуйте, {{ user.name }}!</p>
{% endif %}
Здесь директива if определяет, будет ли отображаться содержимое.
Чем директивы отличаются от выражений и комментариев
В Twig существует три основных типа конструкций.
| Конструкция | Назначение |
|---|---|
{{ ... }} |
Вывод значения |
{% ... %} |
Выполнение директив и управляющих конструкций |
{# ... #} |
Комментарии |
Например:
{# Комментарий #}
{% set title = "Главная" %}
<h1>{{ title }}</h1>
Основные директивы Twig
if
Директива if используется для условного отображения данных.
{% if user %}
Привет, {{ user.name }}!
{% endif %}
Поддерживаются ветки elseif и else.
{% if age >= 18 %}
Совершеннолетний
{% elseif age >= 14 %}
Подросток
{% else %}
Ребенок
{% endif %}
Условия могут использовать операторы сравнения и логические операторы.
{% if user and user.isAdmin %}
Администратор
{% endif %}
for
Директива for предназначена для перебора массивов и других коллекций.
<ul>
{% for product in products %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
Можно получать одновременно ключ и значение.
{% for key, value in data %}
{{ key }}: {{ value }}
{% endfor %}
Если коллекция пустая, используется блок else.
{% for user in users %}
{{ user.name }}
{% else %}
Пользователи отсутствуют.
{% endfor %}
set
Создает новую переменную.
{% set title = "Новости" %}
Также можно сохранить результат блока.
{% set message %}
<strong>Добро пожаловать!</strong>
{% endset %}
Директивы для наследования шаблонов
Одной из сильных сторон Twig является поддержка наследования шаблонов.
extends
Определяет родительский шаблон.
{% extends "base.html.twig" %}
После этого текущий шаблон переопределяет необходимые блоки.
block
Создает именованный блок.
{% block content %}
Содержимое страницы
{% endblock %}
В родительском шаблоне:
<!DOCTYPE html>
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>
parent
Позволяет добавить содержимое родительского блока.
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="/css/custom.css">
{% endblock %}
Подключение других шаблонов
include
Подключает другой шаблон.
{% include "header.html.twig" %}
Можно передавать собственные данные.
{% include "card.html.twig" with {
title: article.title,
text: article.text
} %}
Если файл отсутствует, можно избежать ошибки.
{% include "sidebar.html.twig" ignore missing %}
embed
Объединяет возможности include и extends.
{% embed "card.html.twig" %}
{% block body %}
Текст статьи
{% endblock %}
{% endembed %}
Такой подход удобен при переопределении отдельных блоков внутри подключаемого шаблона.
Импорт макросов
import
Импортирует макросы.
{% import "forms.html.twig" as forms %}
Использование:
{{ forms.input("email") }}
from
Импортирует только необходимые макросы.
{% from "forms.html.twig" import input, textarea %}
Работа с пространствами имен
use
Импортирует блоки из другого шаблона.
{% use "blocks.html.twig" %}
Это удобно для повторного использования одинаковых блоков оформления.
Работа с автоматическим экранированием
autoescape
Позволяет изменить режим экранирования.
{% autoescape false %}
{{ html }}
{% endautoescape %}
Использовать отключение экранирования следует только при полном доверии к данным. В противном случае появляется риск XSS-атак.
Работа с кэшированием и производительностью
В стандартном Twig отсутствует директива кэширования фрагментов шаблона. Однако некоторые CMS и фреймворки добавляют собственные расширения с директивами вроде cache.
В чистом Twig рекомендуется:
- использовать наследование шаблонов;
- избегать сложной бизнес-логики;
- подготавливать данные в контроллере;
- использовать кэш компилированных шаблонов.
Пространство имен шаблонов
При использовании Symfony часто встречается запись:
{% extends "@Admin/layout.html.twig" %}
Префикс @Admin обозначает пространство имен шаблонов, зарегистрированное в приложении.
Директива deprecated
Twig позволяет помечать шаблон как устаревший.
{% deprecated "Используйте profile.html.twig" %}
При использовании такого шаблона разработчик получит предупреждение.
Работа с несколькими переменными
Можно присвоить значения сразу нескольким переменным.
{% set first, second = "A", "B" %}
Использование циклов
Во время работы директивы for доступна специальная переменная loop.
{% for item in items %}
{{ loop.index }}. {{ item }}
{% endfor %}
Полезные свойства объекта loop:
| Свойство | Описание |
|---|---|
loop.index |
Номер элемента, начиная с 1 |
loop.index0 |
Номер элемента, начиная с 0 |
loop.revindex |
Номер элемента с конца |
loop.first |
Первый элемент |
loop.last |
Последний элемент |
loop.length |
Размер коллекции |
Пример:
{% for article in articles %}
{% if loop.first %}
<h2>Последние статьи</h2>
{% endif %}
{{ article.title }}
{% endfor %}
Лучшие практики использования директив Twig
При работе с Twig рекомендуется соблюдать несколько правил.
- Используйте шаблоны только для представления данных.
- Не размещайте бизнес-логику внутри шаблонов.
- Подготавливайте данные в контроллере, сервисе или компоненте.
- Используйте наследование шаблонов вместо копирования HTML.
- Повторяющиеся элементы оформляйте через
include,embedили макросы. - Не отключайте экранирование без необходимости.
- Используйте понятные имена блоков и переменных.
- Разбивайте большие шаблоны на небольшие переиспользуемые части.
Частые ошибки
Начинающие разработчики часто допускают следующие ошибки:
- выполнение сложных вычислений внутри шаблона;
- обращение к базе данных непосредственно из шаблона через пользовательские расширения;
- дублирование одинаковой разметки вместо использования
extendsиinclude; - отключение автоматического экранирования без проверки источника данных;
- использование большого количества вложенных условий, ухудшающих читаемость шаблона.
Заключение
Директивы Twig являются основным инструментом управления шаблонами. Они позволяют создавать условия, циклы, наследовать шаблоны, подключать повторно используемые части интерфейса, импортировать макросы и управлять экранированием данных. Правильное использование директив делает шаблоны компактными, безопасными и удобными для сопровождения. Особенно эффективно Twig раскрывает свои возможности в крупных проектах на Symfony, где наследование шаблонов, блоки и повторное использование компонентов помогают поддерживать единый стиль и упрощают развитие приложения.
- 12.07.2026