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

Digital-студия WNDER

Почему чистый PHP — это боль?

Классический пример: вы пишете скрипт, который получает данные из базы и выводит их в таблице. Всё в одном файле: подключение к БД, запрос, цикл, HTML-теги. Пока проект маленький — терпимо. Но когда файл разрастается до 500 строк, а вёрстка переплетается с логикой, начинается ад. Дизайнер просит поменять цвет кнопки, а вы боитесь что-то сломать, потому что рядом условие if и переменная $user.

Twig решает эту проблему, разделяя ответственность: логика — в PHP-классах, отображение — в шаблонах. Шаблоны выглядят почти как HTML, только с фигурными скобками для вставки данных. Это удобно и безопасно.

Что такое Twig и с чем его едят

Twig — это библиотека для шаблонизации, написанная на PHP. Она компилирует шаблоны в оптимизированный PHP-код, поэтому работает быстро. Синтаксис простой: {{ переменная }} для вывода, {% тег %} для логики. Например, цикл выглядит так:

{% for user in users %}
    
  • {{ user.name }}
  • {% endfor %}

    Внутри шаблона нет доступа к опасным функциям, поэтому случайно выполнить SQL-инъекцию или XSS не получится. Twig автоматически экранирует вывод — это большой плюс для безопасности.

    Установка и первый шаблон

    Установить Twig проще простого через Composer. В корне проекта выполните:

    composer require twig/twig
    

    Теперь создадим простой шаблон hello.html.twig:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Привет, {{ name }}!</title>
    </head>
    <body>
        <h1>Привет, {{ name }}!</h1>
    </body>
    </html>
    

    И PHP-скрипт, который его отрендерит:

    <?php
    require_once 'vendor/autoload.php';
    
    $loader = new \Twig\Loader\FilesystemLoader('templates');
    $twig = new \Twig\Environment($loader);
    
    echo $twig->render('hello.html.twig', ['name' => 'Мир']);
    

    Всё, вы только что использовали Twig. Как видите, ничего сложного.

    Основные возможности Twig

    Twig умеет много: наследование шаблонов, блоки, фильтры, функции, макросы. Рассмотрим ключевые вещи, которые пригодятся в работе.

    Наследование и блоки

    Это одна из самых мощных фич. Вы создаёте базовый шаблон base.html.twig с общим каркасом:

    <!DOCTYPE html>
    <html>
    <head>
        <title>{% block title %}Мой сайт{% endblock %}</title>
    </head>
    <body>
        <header>
            <h1>Добро пожаловать!</h1>
        </header>
        <main>
            {% block content %}{% endblock %}
        </main>
        <footer>
            &copy; 2025
        </footer>
    </body>
    </html>
    

    А потом в дочернем шаблоне переопределяете нужные блоки:

    {% extends 'base.html.twig' %}
    
    {% block title %}Главная страница{% endblock %}
    
    {% block content %}
        <p>Здесь контент главной.</p>
    {% endblock %}
    

    Такой подход избавляет от дублирования кода и упрощает поддержку.

    Фильтры и функции

    Twig предоставляет кучу фильтров для форматирования данных. Например, |upper делает текст заглавными буквами, |date форматирует дату, |escape экранирует HTML. Полный список можно найти в документации.

    Пример использования фильтра:

    {{ 'привет'|upper }} {# выведет 'ПРИВЕТ' #}
    

    Также можно вызывать функции, например dump() для отладки (если включён debug).

    Сравнение чистого PHP и Twig

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

    Критерий Чистый PHP Twig
    Читаемость Смешаны HTML и PHP, сложно читать Чистый HTML с простыми вставками
    Безопасность Нужно вручную экранировать вывод Автоматическое экранирование
    Гибкость Можно всё, но легко выстрелить в ногу Ограниченный набор тегов, но безопасно
    Скорость Высокая Компилируется в PHP, сравнима

    Как видите, Twig выигрывает по удобству и безопасности, немного уступая в гибкости, но это компенсируется порядком в коде.

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

    Практические советы и лайфхаки

    • Включайте debug-режим только на этапе разработки. В продакшене обязательно отключайте, чтобы не светить лишнюю информацию.
    • Используйте кеширование шаблонов. Twig компилирует шаблоны в PHP-файлы, и их можно кешировать, чтобы не тратить время на компиляцию при каждом запросе.
    • Не пишите сложную логику в шаблонах. Если нужно что-то посчитать, лучше подготовить данные в контроллере.
    • Подключайте расширения для дополнительных фильтров и функций, если стандартных не хватает.

    Заключение

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

    Студия WNDER