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


