TWIG是否使用" ..."支持可变参数。令牌?

时间:2018-05-31 09:58:12

标签: php include twig variadic-functions

我想从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

1 个答案:

答案 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扩展。

  

注意:请注意,传递给可变参数过滤器的命名参数不能   检查有效性,因为它们将自动结束选项   阵列。

但是,不支持...令牌。