Если вы когда-нибудь писали сайт на PHP, то наверняка сталкивались с ситуацией, когда в одном файле смешаны и SQL-запросы, и HTML-теги, и куски логики. Это работает, но поддерживать такой код — настоящий ад. Сегодня поговорим о том, как навести порядок с помощью шаблонизатора Twig. Это не магия, а просто удобный инструмент, который разделяет логику и представление. Статья будет полезна и новичкам, и тем, кто уже слышал о шаблонизаторах, но не решался попробовать.

Digital-студия WNDER

Ссылка на оригинальную статью

Почему смешивать PHP и HTML — плохая идея

Представьте, что вы готовите борщ. Рецепт — это логика, а тарелка — это HTML. Если вы выльете борщ прямо на стол, есть его будет невозможно. Так и с кодом: когда PHP-логика и HTML переплетены, любое изменение дизайна превращается в квест. Дизайнеру приходится лезть в код, а разработчику — разбираться в вёрстке. В итоге все страдают.

Вот типичный пример плохого кода:



Вроде бы ничего страшного, но если таких вставок десятки, файл становится нечитаемым. А теперь представьте, что вам нужно вывести данные в JSON, в PDF или в email. Придётся переписывать всё заново. Twig решает эту проблему раз и навсегда.

Что такое Twig и как он работает

Twig — это шаблонизатор для PHP. Он берёт шаблон (файл с HTML и специальными конструкциями) и данные (массив, объект) и склеивает их в готовую страницу. Вы пишете шаблоны отдельно от логики, а Twig заботится о том, чтобы всё оказалось на своих местах.

У Twig есть три главные фишки:

  • Простота — синтаксис похож на обычный HTML, но с дополнительными тегами.
  • Безопасность — Twig автоматически экранирует вывод, защищая от XSS-атак.
  • Гибкость — можно создавать собственные функции и фильтры.

Как это работает на практике? Допустим, у вас есть массив с пользователями. Вы передаёте его в шаблон, а Twig сам подставляет значения в нужные места. Вот и всё.

Установка и настройка Twig

Установить Twig проще простого, если вы используете Composer — менеджер пакетов для PHP. Если не знаете, что это, представьте себе магазин приложений для вашего кода. Одна команда — и всё готово.


composer require twig/twig

После установки нужно настроить загрузчик шаблонов. Это как указать Twig, где лежат файлы с шаблонами. Вот пример подключения:


 '/path/to/compilation_cache',
]);

Параметр cache необязателен, но в production он ускоряет работу. Twig компилирует шаблоны в обычный PHP, и если вы укажете папку для кэша, он будет использовать готовые файлы, а не пересобирать их каждый раз.

Основы синтаксиса: переменные, циклы и условия

Синтаксис Twig интуитивно понятен. Чтобы вывести переменную, используйте двойные фигурные скобки:


{{ user.name }}

А для циклов и условий — одинарные с процентами:


{% for user in users %}
    

{{ user.name }}

{% else %}

Нет пользователей

{% endfor %}

Ветвления тоже выглядят просто:


{% if user.isAdmin %}
    

Администратор

{% else %}

Обычный пользователь

{% endif %}

Заметьте, что в цикле {% for %} есть блок {% else %} — он сработает, если массив пуст. Это удобно, чтобы не писать дополнительные проверки.

Фильтры и функции: делаем код ещё чище

Фильтры — это встроенные помощники, которые преобразуют данные. Например, нужно вывести дату в читаемом виде или обрезать длинный текст. В Twig это делается одной строкой:


{{ post.createdAt|date('d.m.Y') }}
{{ post.text|slice(0, 100) }}...
{{ user.name|upper }}

Фильтры можно комбинировать через |. Например, {{ text|striptags|slice(0, 50) }} — сначала удалит HTML-теги, потом обрежет до 50 символов.

Также в Twig есть готовые функции, например dump() для отладки:


{{ dump(user) }}

Это выведет содержимое переменной в удобном виде, как var_dump() в PHP.

Для наглядности соберём таблицу популярных фильтров:

Фильтр Что делает Пример
upper Переводит строку в верхний регистр {{ 'hello'|upper }} → HELLO
lower Переводит строку в нижний регистр {{ 'HELLO'|lower }} → hello
date Форматирует дату {{ '2025-03-01'|date('d.m.Y') }} → 01.03.2025
slice Обрезает строку или массив {{ 'Hello'|slice(0, 3) }} → Hel
striptags Удаляет HTML-теги {{ 'text'|striptags }} → text
Правило: Всегда используйте фильтр escape или полагайтесь на автоматическое экранирование Twig, когда выводите пользовательские данные. Это защитит сайт от XSS-атак. Twig делает это по умолчанию, если вы не отключили опцию autoescape.

Наследование шаблонов: избавляемся от дублирования

Одна из самых мощных возможностей Twig — наследование шаблонов. Представьте, что у вас есть общий каркас страницы: шапка, меню, подвал. Вместо того чтобы копировать его в каждый файл, вы создаёте базовый шаблон и расширяете его.

Вот как это выглядит. Базовый шаблон base.html.twig:





    {% block title %}Мой сайт{% endblock %}


    
Шапка сайта
{% block content %}{% endblock %}
Подвал

Теперь создаём страницу, которая расширяет базовый:


{% extends 'base.html.twig' %}

{% block title %}Главная страница{% endblock %}

{% block content %}
    

Добро пожаловать!

Это главная страница.

{% endblock %}

В итоге Twig подставит блоки в нужные места. Если какой-то блок не переопределён, будет использовано содержимое из родительского шаблона. Это экономит часы работы.

Советы и лайфхаки для работы с Twig

  • Используйте кэш в production. Включите кэширование, чтобы не компилировать шаблоны каждый раз. Это ускорит сайт.
  • Создавайте собственные фильтры. Если вам нужно что-то специфичное, например, форматирование телефона, вы можете написать свой фильтр и использовать его в шаблонах.
  • Не пишите сложную логику в шаблонах. Twig — не место для алгоритмов. Всю обработку данных делайте в контроллере или модели, а в шаблон передавайте уже готовые данные.
  • Используйте макросы для повторяющихся кусков. Макросы — это как функции в PHP, только для HTML. Если у вас есть повторяющиеся элементы, вынесите их в макрос.
Лайфхак: В Twig можно использовать оператор ?: для коротких условий. Например, {{ user.name ?: 'Гость' }} выведет имя пользователя, а если оно пустое — «Гость». Это сокращает код и делает его читабельнее.

Что в итоге

Twig — это не просто модная штука, а реальный инструмент, который делает код чище и поддерживаемее. Вы отделяете логику от представления, защищаете сайт от уязвимостей и ускоряете разработку. Даже если вы работаете над небольшим проектом, Twig окупится уже через пару недель.

Попробуйте — и вы почувствуете разницу. А когда освоите базовые возможности, загляните в документацию: там есть ещё много интересного, например, тесты, операторы и глобальные переменные.

Студия WNDER