Шаблоны в Symfony
Создание и использование шаблонов
Шаблоны в Symfony создаются с помощью Twig — гибкого, быстрого и безопасного шаблонизатора.
#Установка Twig
composer require symfony/twig-bundle
Язык шаблонов Twig
Вы не можете запускать PHP-код внутри шаблонов Twig, но в Twig есть утилиты для выполнения некоторой логики в шаблонах.
Синтаксис Twig основан на этих трех конструкциях:
{{ ... }}, используется для отображения содержимого переменной или результата вычисления
{% ... %}, используется для выполнения некоторой логики, например условного оператора или цикла
{# ... #}, используется для добавления комментариев в шаблон (в отличие от HTML-комментариев, эти комментарии не отображаются на странице).
{{ page_title }}
{% if user.isLoggedIn %}
{# ... #}
фильтры изменяют содержимое перед отображением, как, например, фильтр upper для преобразования содержимого в верхний регистр.
{{ title|upper }}
В Twig есть:
Теги
Фильтры
Функции
Twig Extensions Defined by Symfony
В Twig есть несколько параметров конфигурации, которые позволяют задать такие параметры, как формат отображения чисел и дат, кэширование шаблонов и т. д
https://symfony.com/doc/current/reference/configuration/twig.html
Создание шаблонов
Сначала нужно создать новый файл в каталоге templates/ для хранения содержимого шаблона
Например файл templates/user/notifications.html.twig
Затем необходимо создать контроллер, который отображает этот шаблон и передает ему необходимые переменные в созданный шаблон
// src/Controller/UserController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class UserController extends AbstractController
{
// ...
public function notifications(): Response
{
// get the user information and notifications somehow
$userFirstName = '...';
$userNotifications = ['...', '...'];
// the template path is the relative file path from `templates/`
return $this->render('user/notifications.html.twig', [
// this array defines the variables passed to the template,
// where the key is the variable name and the value is the variable value
// (Twig recommends using snake_case variable names: 'foo_bar' instead of 'fooBar')
'user_first_name' => $userFirstName,
'notifications' => $userNotifications,
]);
}
}
Источник: https://symfony.com/doc/current/templates.html
Именование шаблонов
Используйте змеиный регистр для имен файлов и каталогов (например, blog_posts.html.twig, admin/default_theme/blog/index.html.twig, и т. д.);
Переменные шаблона
В переменных обычно хранятся объекты и массивы, а не строки, числа и логические значения.
Twig обеспечивает быстрый доступ к сложным переменным PHP.
{{ user.name }} added this comment on {{ comment.publishedAt|date }}
При использовании нотации foo.bar Twig пытается получить значение переменной в следующем порядке:
$foo['bar'] (массив и элемент); $foo->bar (объект и публичное свойство); $foo->bar() (объект и публичный метод); $foo->getBar() (объект и метод getter); $foo->isBar() (объект и метод isser); $foo->hasBar() (объект и метод hasser); Если ничего из вышеперечисленного не подходит, используйте null (или сгенерируйте исключение Twig\Error\RuntimeError при включенной опции strict_variables).
Ссылки на страницы
Вместо того чтобы прописывать URL-адреса ссылок вручную, используйте path()функцию для создания URL-адресов на основе конфигурации маршрутизации.
Позже, если вы захотите изменить URL-адрес конкретной страницы, вам нужно будет лишь изменить конфигурацию маршрутизации: шаблоны автоматически сгенерируют новый URL-адрес.
Подробнее здесь: https://symfony.com/doc/current/templates.html#linking-to-pages
{{ post.title }}
Ссылки на CSS, JavaScript и изображения
Если шаблону нужна ссылка на статический ресурс (например, изображение), Symfony предоставляет функцию asset() Twig, которая помогает сгенерировать такой URL. Сначала установите пакет asset:
composer require symfony/asset
asset() добавляет хэш версии к URL-адресам ресурсов для очистки кэша. Это работает как через AssetMapper, так и через компонент Asset
{# the image lives at "public/images/logo.png" #}
{# the CSS file lives at "public/css/blog.css" #}
{# the JS file lives at "public/bundles/acme/js/loader.js" #}
Сборка, управление версиями и более продвинутая обработка CSS, JavaScript и изображений
О том, как создавать и управлять версиями ресурсов JavaScript и CSS современным способом, читайте в статье о Symfony AssetMapper.
https://symfony.com/doc/current/frontend.html
Глобальная переменная приложения






