Если вы пишете на PHP и до сих пор вставляете HTML прямо в код или, наоборот, PHP в вёрстку, скорее всего, рано или поздно получается каша. Twig решает эту проблему элегантно: он разделяет логику и представление, делает шаблоны чище и безопаснее. В этой статье разберём, что такое Twig, как его готовить и какие приёмы стоит взять на вооружение.
Что такое Twig и зачем он нужен
Twig — это шаблонизатор для PHP. Проще говоря, это инструмент, который позволяет отделить логику приложения от внешнего вида. Вы пишете HTML-шаблоны с специальными конструкциями вроде {{ variable }} и {% if %}, а Twig превращает их в готовый HTML, подставляя нужные данные.
Зачем это нужно? Вот несколько причин:
- Шаблоны становятся чище. В них нет PHP-кода, только разметка и понятные теги.
- Безопасность. Twig автоматически экранирует вывод, защищая от XSS-атак.
- Гибкость. Наследование шаблонов, блоки, макросы — всё это упрощает повторное использование кода.
- Скорость. Twig компилирует шаблоны в PHP-классы, которые кешируются, так что производительность не страдает.
Многие популярные фреймворки, например Symfony, используют Twig по умолчанию. Но его можно прикрутить к любому проекту, даже к самописному.
Установка и настройка Twig
Самый простой способ установить Twig — через Composer. Если вы ещё не используете Composer, самое время начать: это стандартный менеджер зависимостей в мире PHP.
composer require twig/twig
После установки нужно создать окружение Twig. Обычно это делается в отдельном файле, например init.php:
<?php
require __DIR__ . '/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/templates');
$twig = new \Twig\Environment($loader, [
'cache' => __DIR__ . '/cache',
'debug' => true,
]);
Здесь мы указали папку с шаблонами (templates) и папку для кеша (cache). Параметр debug полезен при разработке, но на продакшене его лучше отключить.
Синтаксис Twig: основы
В Twig есть три основных конструкции:
{{ ... }}— вывод переменной или результата выражения.{% ... %}— теги управления (условия, циклы, блоки).{# ... #}— комментарии.
Давайте посмотрим на простой пример шаблона hello.twig:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Привет, {{ name }}!</h1>
<p>Текущее время: {{ 'now'|date('H:i') }}</p>
</body>
</html>
А вот как его отрендерить в PHP:
<?php
require 'init.php';
echo $twig->render('hello.twig', [
'title' => 'Главная страница',
'name' => 'Иван',
]);
Как видите, ничего сложного. Переменные передаются в шаблон через ассоциативный массив.
Наследование шаблонов и блоки
Одна из самых мощных фич Twig — наследование шаблонов. Вы создаёте базовый шаблон с общим каркасом (header, footer, меню) и определяете в нём блоки, которые дочерние шаблоны могут переопределять.
Пример базового шаблона base.twig:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Мой сайт{% endblock %}</title>
</head>
<body>
<header>
<h1>Добро пожаловать!</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
© 2025
</footer>
</body>
</html>
Теперь дочерний шаблон page.twig:
{% extends 'base.twig' %}
{% block title %}Страница о нас{% endblock %}
{% block content %}
<h2>О нашей компании</h2>
<p>Мы делаем крутые вещи.</p>
{% endblock %}
При рендеринге page.twig Twig подставит содержимое блоков в базовый шаблон. Это экономит кучу времени и избавляет от дублирования кода.
Фильтры, функции и макросы
Twig богат на встроенные фильтры и функции. Фильтры применяются к переменным через символ |. Например, {{ name|upper }} переведёт строку в верхний регистр. Функции вызываются как обычно: {{ random(1, 10) }}.
Вот таблица с некоторыми популярными фильтрами и их аналогами в PHP:
| Фильтр Twig | Действие | Аналог в PHP |
|---|---|---|
upper |
Верхний регистр | strtoupper() |
lower |
Нижний регистр | strtolower() |
date |
Форматирование даты | date() |
escape |
Экранирование HTML | htmlspecialchars() |
Макросы в Twig — это что-то вроде функций, которые можно переиспользовать в разных шаблонах. Они помогают не повторять одинаковую разметку. Пример макроса для вывода формы входа:
{% macro input(name, value, type = 'text') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}
Использование:
{% import 'forms.twig' as forms %}
{{ forms.input('username', 'Иван') }}
Практические советы и лайфхаки
Вот несколько проверенных приёмов, которые сделают вашу работу с Twig ещё приятнее:
- Используйте
includeдля вставки повторяющихся фрагментов (например, сайдбара или футера). - Для отладки переменных применяйте функцию
dump()(доступна при включённом debug). - Не забывайте про автоэкранирование: по умолчанию Twig экранирует вывод, но если нужно вывести HTML, используйте фильтр
raw. - Кеширование шаблонов на продакшене обязательно — это ускоряет рендеринг.
Итог
Twig — это не просто модный инструмент, а реальный способ сделать код чище и безопаснее. Он разделяет логику и представление, упрощает поддержку проектов и ускоряет разработку. Если вы до сих пор пишете шаблоны на чистом PHP, попробуйте Twig на небольшом проекте — и вы почувствуете разницу. Главное — не забывайте про базовые шаблоны, блоки и кеширование.
Удачи в разработке!



