Функция/фильтр Twig без ввода?

Я использую Slim 3 и Slim Twig-View. Я хочу добавить функцию Twig (или фильтр, не знаю, в чем разница?), которая генерирует случайную строку и не принимает никаких входных данных.

Я смог добавить фильтр следующим образом:

$twig->getEnvironment()->addFilter(
   new \Twig_Filter('guid', function(){ return generateGUID(); })
);

Но я не могу использовать его, не предоставив фиктивный ввод:

{{ 0|guid }} This will work
{{ guid }} This will not work

Как я могу использовать свой фильтр/функцию guid без каких-либо входных данных?


person Magnus W    schedule 09.03.2021    source источник


Ответы (1)


Фильтр всегда применяется к чему-то, он что-то фильтрует.

На самом деле вам нужна функция.
расширение Twig страница документации является невероятным источником информации по этому вопросу.

На первый взгляд, я бы даже сказал, вам следует определить для этого тег, но в документации по тегу прямо сказано:

  • Если ваш тег генерирует какие-либо выходные данные, используйте вместо этого функцию.

Источник: https://twig.symfony.com/doc/3.x/advanced.html#tags


Итак, чтобы определить функцию :

Функции определяются точно так же, как фильтры, но вам нужно создать экземпляр \Twig\TwigFunction:

$twig = new \Twig\Environment($loader); 
$function = new \Twig\Twig_Function('function_name', function () {
    // ... 
}); 
$twig->addFunction($function);

Итак, конкретно для вас:

$container->get('view')->getEnvironment()->addFunction(
   new Twig_SimpleFunction('guid', function(){ return generateGUID(); })
);

Будет доступен через:

{{ guid() }}

Другое, что стоит прочитать:

person β.εηοιτ.βε    schedule 09.03.2021