Понадобилось мне сгенерировать уникальный код, чтобы привязать уникальные стили к конкретному контейнеру. Функция random в twig чаще всего достаточна для этой цели. Но хотелось пойти немного дальше, и вытащить сервис генерации UUID.
Это нам приводит к задаче создания плагина для TWIG в Drupal.
Для создания плагина Twig в Drupal, который генерирует UUID, нужно создать специальное расширение, которое добавляет новую функцию для использования в шаблонах Twig. В этой статье мы рассмотрим процесс создания такого плагина на примере класса UuidExtension, который будет генерировать уникальные идентификаторы для использования в шаблонах Drupal.
Шаг 1: Создание плагина Twig
В Drupal расширения для Twig реализуются через создание класса, который наследуется от Twig\Extension\AbstractExtension. Этот класс предоставляет методы для добавления пользовательских функций и фильтров в Twig.
В нашем случае нужно добавить функцию для генерации UUID. Мы будем использовать сервис uuid в Drupal 11, который уже имеет метод для генерации уникальных идентификаторов.
Шаг 2: Реализация плагина
Создайте файл UuidExtension.php в директории вашего модуля. Например, если ваш модуль называется tweaks, путь к файлу будет следующим:
|
1 |
modules/custom/tweaks/src/Twig/UuidExtension.php |
Теперь реализуем сам плагин:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php namespace Drupal\tweaks\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; /** * Class UuidExtension. * * Добавляет функцию generate_uuid для генерации UUID. */ class UuidExtension extends AbstractExtension { /** * Возвращает массив функций, которые будут доступны в Twig. * * @return array * Массив функций Twig. */ public function getFunctions() { return [ new TwigFunction('generate_uuid', [$this, 'generateUuid']), ]; } /** * Генерирует UUID с использованием сервиса Drupal. * * @return string * Сгенерированный UUID. */ public function generateUuid() { // Используем сервис UUID для генерации уникального идентификатора. $uuid_service = \Drupal::service('uuid'); return $uuid_service->generate(); } } |
Шаг 3: Регистрация плагина в Drupal
Для того чтобы Drupal знал о вашем расширении, его необходимо зарегистрировать. Для этого нужно добавить информацию о плагине в файл tweaks.services.yml в вашем модуле:
|
1 2 3 4 5 |
services: tweaks.twig.uuid_extension: class: Drupal\tweaks\Twig\UuidExtension tags: - { name: twig.extension } |
Этот код регистрирует ваше расширение как сервис и привязывает его к тегу twig.extension, что позволяет Drupal автоматически загрузить расширение в Twig.
Шаг 4: Использование плагина в шаблонах
После того как плагин зарегистрирован, вы можете использовать его в шаблонах Twig, чтобы генерировать UUID. Для этого просто вызовите функцию generate_uuid:
|
1 |
{{ generate_uuid() }} |
Этот код в шаблоне Twig сгенерирует уникальный идентификатор каждый раз, когда он будет вызван.