В TWIG уже много разных встроенных фильтров, Drupal их перечень только расширяет. Но наше счастье было бы не полным, если бы мы не могли добавить свои фильтры.
В Drupal это делается через сервис twig.extension.
Для начала надо сформировать описатель, который подскажет какой класс в нашем модуле будет описывать расширение сервиса. Пусть модуль называется my_module.
Тогда нам нужно создать файл
/modules/custom/my_module/my_module.services.yml:
1 2 3 4 5 |
services: custom_twig.twig.CustomTwig: class: Drupal\my_module\CustomTwig tags: - { name: twig.extension } |
Он говорит, что наш класс CustomTwig выполняет роль расширения TWIG.
Класс, согласно PSR-4, должен находится в
/modules/custom/my_module/src/CustomTwig.php файле.
Я добавил фильтр с функцией preg_replace:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
namespace Drupal\my_module; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; use Twig\TwigFunction; /** * Custom twig functions. */ class CustomTwig extends AbstractExtension { public function getFilters() { return [ new TwigFilter('preg_replace', [$this, 'preg_replace']), ]; } public function preg_replace($text, $pattern, $replace) { return preg_replace( $pattern, $replace, $text); } } |
После сброса кеша, можно будет использовать этот фильтр в шаблонах, например (все буквы «о» меняем на «a»):
1 |
{{ "Огого какой пример!"|preg_replace('/о/i', 'а') }} |