Как написать пользовательское расширение Twig
Дата обновления перевода 2023-07-06
Как написать пользовательское расширение Twig
Если вы хотите создать в Twig пользовательские функции, фильтры, тесты или ещё что-либо, вам понадобится создать расширение Twig. Вы можете прочитать больше о Расширениях Twig в документации Twig.
Создайте класс расширения
Представьте, что вы хотите создать новый фильтр под названием price
, который
форматирует число в денежное значение:
1 2 3 4
{{ product.price|price }}
{# передайте в 3 необязательных аргументах #}
{{ product.price|price(2, ',', '.') }}
Создайте класс, расширяющий \Twig_Extension
, и заполните логику:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// src/AppBundle/Twig/AppExtension.php
namespace AppBundle\Twig;
class AppExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
);
}
public function priceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',')
{
$price = number_format($number, $decimals, $decPoint, $thousandsSep);
$price = '$'.$price;
return $price;
}
}
Note
До версии Twig 1.26, ваше расширение должно было определять дополнительный
метод getName()
, который возвращал внутреннее имя расширения (например,
app.my_extension
). Когда ваше расширение должно быть совместимо с версиями
Twig до 1.26, включите этот метод, который опускается в примере выше.
Tip
Кроме пользовательских фильтров, вы также можете добавлять пользовательские функции и регистрировать глобальные переменные.
Регистрация расширения в качестве сервиса
Далее, зарегистрируйте ваш класс в качестве сервисаи тегируйте его twig.extension
.
Если вы используете конфигурацию services.yml по умолчанию ,
то вы закончили! Symfony автоматически узнает о вашем новом сервисеи добавит тег.
Теперь вы можете начать использовать ваш фильтр в любом шаблоне Twig.