我想从include
向函数提供可变数量的参数,但我不确定TWIG是否支持 PHP三点令牌。 / p>
我确定可以做到
{{ callFunction('funcName', arg1, arg2, arg3) }}
{{ callFunction('funcName2', null, true) }}
如果我在PHP中使用可变参数
定义了Twig_Function
public function callFunction($name, ...$arguments)
但如果我想通过include
调用该函数怎么办?
{% set foo = 'bar' %}
{% include 'call_function.twig' with {
'func_name':'funcName2',
'arguments': [ null, true ]
%}
这似乎不受支持
{{ callFunction(func_name, ...arguments) }}
如何将可变数量的参数传递给include
?
答案 0 :(得分:1)
您应该能够添加如下的可变参数函数:
$twigenv->addFunction(new Twig_SimpleFunction('foo', function ($a1, array $args = array()) {
}, array('is_variadic' => true));
用法:
{{ foo(1, 2, a="a", b="b") }}
#{# foo(1, array(0 => 2, "a" => "a", "b" => "b")); #}
您还可以创建创建variadic filters:
当过滤器接受任意数量的参数时,请设置 is_variadic选项为true; Twig将传递额外的参数作为 过滤器调用的最后一个参数为数组:
$filter = new Twig_Filter('foo', function ($file, array $options = array()) {
// ...
}, array('is_variadic' => true));
然后,将过滤器添加到Twig环境中:
$twig = new Twig_Environment($loader);
$twig->addFilter($filter);
然后,在模板中使用它:
{{ value|foo(options) }}
如果仍然不够,您可以创建自己的Tiwg扩展。
注意:请注意,传递给可变参数过滤器的命名参数不能 检查有效性,因为它们将自动结束选项 阵列。
但是,不支持...
令牌。