Twig 无输入的细枝功能/过滤器?

Twig 无输入的细枝功能/过滤器?,twig,slim,slim-3,Twig,Slim,Slim 3,我正在使用Slim 3和Slim Twig视图。我想添加一个Twig函数(或者filter,不确定有什么区别?),它生成一个随机字符串,并且不接受任何输入 我可以添加如下过滤器: $twig->getEnvironment()->addFilter( new \Twig_Filter('guid', function(){ return generateGUID(); }) ); 但如果不提供一些虚拟输入,我似乎无法使用它: {{ 0|guid }} This will wo

我正在使用Slim 3和Slim Twig视图。我想添加一个Twig函数(或者filter,不确定有什么区别?),它生成一个随机字符串,并且不接受任何输入

我可以添加如下过滤器:

$twig->getEnvironment()->addFilter(
   new \Twig_Filter('guid', function(){ return generateGUID(); })
);
但如果不提供一些虚拟输入,我似乎无法使用它:

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

如何在不提供任何输入的情况下使用我的
guid
filter/函数?

过滤器总是应用于某个对象,它过滤某个对象

实际上,您需要的是一个函数。
文件的这一页是关于这一问题的令人难以置信的信息来源

乍一看,我甚至会说您应该为此定义一个标记,但标记上的文档明确指出:

  • 如果您的标记生成一些输出,请使用函数
资料来源:


事实上,为了定义一个:

函数的定义方式与过滤器完全相同,但您需要创建
\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() }}

其他值得一读的内容

  • ,在Slim文档中
  • 你可以用一个简单的方法达到同样的效果