В 4-ом уроке мы погрузимся в изучение шаблонов Symfony с использованием Twig. Это ключевой навык для создания красивых и структурированных веб-приложений.
Twig это современный шаблонизатор для PHP, который стал стандартом в Symfony. Он превращает написание HTML-кода в удовольствие благодаря своей чистоте, безопасности и простоте. Вот почему Twig так хорош:
- Читаемость. Синтаксис похож на естественный язык.
- Безопасность. Автоматически экранирует переменные, защищая от XSS-атак.
- Гибкость. Наследование шаблонов, фильтры, макросы — всё под рукой.
Установка Twig
В Symfony Twig включен по умолчанию. Но если вдруг его нет, установите через Composer:
composer require twig
Наследование шаблонов: extends и block
Представьте, что у вас есть 10 страниц с одинаковым хедером и футером. Копировать их на каждую страницу? Нет! Twig позволяет использовать наследование шаблонов.
Создаем базовый шаблон
Создайте файл templates/base.html.twig
:
<!DOCTYPE html> <html> <head> <title>{% block title %}Мой сайт{% endblock %}</title> {% block stylesheets %}{% endblock %} </head> <body> <header>Шапка сайта</header> <main> {% block content %}{% endblock %} </main> <footer>Подвал сайта © {{ "now"|date("Y") }}</footer> {% block javascripts %}{% endblock %} </body> </html>
Здесь:
{% block %}
— определяет область, которую можно переопределить в дочерних шаблонах.{{ "now"|date("Y") }}
— выводит текущий год, используя фильтрdate
.
Дочерний шаблон
Создайте templates/page/homepage.html.twig
:
{% extends 'base.html.twig' %} {% block title %}Главная страница{% endblock %} {% block content %} <h1>Добро пожаловать!</h1> <p>Это контент главной страницы.</p> {% endblock %}
Что происходит:
{% extends 'base.html.twig' %}
— наследуем структуру базового шаблона.- Переопределяем блоки
title
иcontent
.
Практическая задача 1:
Создайте базовый шаблон с блоками header
, content
, footer
. Сделайте дочерний шаблон для страницы «О нас», переопределив блок content
.
Переменные, фильтры и циклы в Twig
Переменные
Передать переменную из контроллера в шаблон очень просто. Например, в контроллере:
// src/Controller/DefaultController.php public function index(): Response { return $this->render('homepage.html.twig', [ 'username' => 'Максим', 'products' => ['Ноутбук', 'Телефон', 'Наушники'], ]); }
В шаблоне homepage.html.twig
:
<p>Привет, {{ username }}!</p>
Фильтры
Фильтры преобразуют переменные. Примеры:
{{ username|upper }} <!-- МАКСИМ --> {{ "2023-10-01"|date("d.m.Y") }} <!-- 01.10.2023 --> {{ "Hello World"|lower }} <!-- hello world -->
Список популярных фильтров:
capitalize
: Первая буква заглавная.length
: Длина массива или строки.default('Гость')
: Значение по умолчанию, если переменная пуста.
Циклы
Для вывода списка товаров:
<ul> {% for product in products %} <li>{{ product }}</li> {% else %} <li>Товаров нет.</li> {% endfor %} </ul>
Условия:
{% if products|length > 0 %} <p>Количество товаров: {{ products|length }}</p> {% else %} <p>Товары отсутствуют.</p> {% endif %}
Практическая задача 2:
Создайте шаблон, который выводит список пользователей (массив users
). Если список пуст, выведите «Пользователи не найдены». Используйте фильтр capitalize
для имен.
Подключение CSS/JS в Symfony
В Symfony для управления статикой используется компонент Asset.
Настройка
- Убедитесь, что установлен пакет:
composer require symfony/asset
- CSS и JS размещайте в директории
public/assets/
:
public/ assets/ css/ styles.css js/ script.js
Подключение в шаблоне
В базовом шаблоне base.html.twig
:
{% block stylesheets %} <link rel="stylesheet" href="{{ asset('assets/css/styles.css') }}"> {% endblock %} {% block javascripts %} <script src="{{ asset('assets/js/script.js') }}"></script> {% endblock %}
Функция asset()
автоматически генерирует корректный путь, учитывая настройки сервера.
Версионирование
Чтобы избежать кэширования старых файлов, добавьте версию:
<link rel="stylesheet" href="{{ asset('assets/css/styles.css') }}?v=1.0">
Практическая задача 3:
Создайте файл styles.css
с изменением цвета фона body. Подключите его к базовому шаблону. Проверьте, что стили применяются.
Итоги 4-го урока
Сегодня мы разобрали основы Twig: от наследования шаблонов до работы с переменными и циклами. Теперь вы умеете:
- Создавать структуру сайта через
extends
иblock
. - Использовать фильтры и условия для динамического контента.
- Подключать CSS/JS через компонент Asset.
Создайте простое приложение с несколькими страницами, используя всё, что узнали.
Хотите освоить Symfony от основ до продвинутых тем? Переходите на курс по Symfony для начинающих. Там вас ждут уроки по Doctrine, формам, аутентификации и многому другому.