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

Digital-студия WNDER

Что такое Twig и зачем он нужен

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

Представьте, что вы готовите бутерброды. Можно намазывать масло прямо на хлеб, а можно сначала подготовить ингредиенты, а потом собрать. Twig — это как раз «сборка»: у вас есть шаблон (хлеб), данные (масло, колбаса), и вы их соединяете в нужный момент. Без Twig вы бы смешивали всё в одной миске — в PHP-файле.

Основные преимущества Twig:

  • Читаемость: шаблоны выглядят как обычный HTML с простыми вставками.
  • Безопасность: автоэкранирование вывода защищает от XSS-атак.
  • Гибкость: наследование шаблонов, блоки, макросы — всё для повторного использования кода.
  • Скорость: Twig компилирует шаблоны в PHP-код, что ускоряет работу.

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

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

composer require twig/twig

После установки создайте файл, например index.php, и подключите автозагрузку Composer:

 __DIR__ . '/cache',
    'debug' => true,
]);

Здесь мы указали папку templates для шаблонов и папку cache для скомпилированных шаблонов (её нужно создать). Параметр debug включает отладочный режим.

Правило: Всегда включайте кеширование в production-окружении. Это значительно ускоряет рендеринг шаблонов.

Синтаксис Twig: переменные, фильтры, теги

В Twig используются три основных конструкции:

  • {{ ... }} — вывод переменной или выражения.
  • {% ... %} — теги управления (циклы, условия, наследование).
  • {# ... #} — комментарии.

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

<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>Привет, {{ name }}!</h1>
    <p>Сегодня {{ "now"|date("d.m.Y") }}</p>
</body>
</html>

А в PHP-скрипте отрендерим его:

render('hello.twig', [
    'title' => 'Главная страница',
    'name' => 'Иван',
]);

Фильтры в Twig позволяют модифицировать переменные. Например, |upper делает строку заглавной, |date форматирует дату. Полный список фильтров есть в документации.

Теги управления: {% if %}, {% for %}, {% set %} и другие. Пример цикла:

<ul>
{% for user in users %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

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

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

Базовый шаблон base.twig:

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Мой сайт{% endblock %}</title>
</head>
<body>
    <header>{% block header %}Шапка сайта{% endblock %}</header>
    <main>{% block content %}{% endblock %}</main>
    <footer>{% block footer %}Подвал сайта{% endblock %}</footer>
</body>
</html>

Дочерний шаблон page.twig:

{% extends "base.twig" %}

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

{% block content %}
    <h1>Добро пожаловать!</h1>
    <p>Это контент главной страницы.</p>
{% endblock %}

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

Лайфхак: Используйте функцию parent() внутри блока, чтобы добавить содержимое к родительскому блоку, а не заменить его полностью.

Экранирование и безопасность

Twig автоматически экранирует вывод переменных, что предотвращает XSS-атаки. По умолчанию включено экранирование HTML. Если нужно вывести сырой HTML, используйте фильтр |raw, но только для доверенных данных.

Пример:

{{ user_content|raw }}

Будьте осторожны с |raw — это потенциальная дыра в безопасности.

Сравнение возможностей Twig и чистого PHP:

Возможность Twig Чистый PHP
Разделение логики и представления Да Нет (обычно смешано)
Автоэкранирование Да Нет (нужно вручную)
Наследование шаблонов Да Нет (только через include)
Скорость разработки Выше Ниже
Читаемость шаблонов Высокая Зависит от кода

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

Вот несколько рекомендаций, которые сэкономят вам время и нервы:

  • Используйте include для повторяющихся фрагментов (например, формы авторизации).
  • Создавайте макросы для часто используемых элементов (кнопки, поля ввода).
  • Не забывайте очищать кеш при изменении шаблонов в режиме разработки (отключите кеш или используйте auto_reload).
  • Для отладки используйте функцию dump() (требуется включить debug).
Совет: Организуйте шаблоны в подпапки по разделам сайта (например, templates/admin/, templates/blog/). Это упрощает навигацию.

Также стоит помнить о производительности: хотя Twig компилирует шаблоны в PHP, при большом количестве шаблонов кеш может разрастаться. Регулярно очищайте папку кеша.

Что в итоге

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

Начните с простого: установите Twig, создайте пару шаблонов и почувствуйте разницу. Удачи в разработке!

Студия WNDER