我使用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
过滤器/函数?
过滤器总是适用于某些东西,它过滤什么。
你想要的确实是一个函数。
文档的扩展页是关于这个问题的一个不可思议的信息来源。
乍一看,我甚至会说你应该为这个定义一个标签但是标签上的文档明确地说:
- 如果你的标签生成一些输出,使用函数相反。
<一口> 来源:https://twig.symfony.com/doc/3.x/advanced.html标记 一口>
实际上,为了定义一个函数:
函数的定义方式与过滤器完全相同,但您需要创建
TwigTwigFunction
的实例:$twig = new TwigEnvironment($loader); $function = new TwigTwig_Function('function_name', function () { // ... }); $twig->addFunction($function);
所以更具体地说:
$container->get('view')->getEnvironment()->addFunction(
new Twig_SimpleFunction('guid', function(){ return generateGUID(); })
);
将通过:
访问{{ guid() }}
其他值得阅读的:
- 扩展小枝,在Slim文档
- 你可以用宏 达到同样的效果