我想从
include
为函数提供可变数量的参数,但我不确定 TWIG 是否支持 PHP 三点标记。
我一定可以
{{ 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
?
您应该能够添加这样的可变参数函数:
$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")); #}
您还可以创建可变过滤器:
当过滤器应该接受任意数量的参数时,设置 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 扩展。
注意: 请注意,传递给可变参数过滤器的命名参数不能 检查有效性,因为它们会自动出现在选项中 数组。
但是,不支持
...
运算符(也称为 splat 运算符、分散运算符或展开运算符)。
twig 3.0 现在支持扩展运算符。
https://twig.symfony.com/doc/3.x/templates.html#other-operators