Поддерживает ли TWIG переменные аргументы, используя & quot; … & quot; фишка?

Я хотел бы предоставить переменное число аргументов функции из include, но я не уверен, что TWIG поддерживает PHP трехточечный токен.

Я уверен, что могу сделать

{{ callFunction('funcName', arg1, arg2, arg3) }}
{{ callFunction('funcName2', null, true) }}

в случае, если у меня есть Twig_Function определено в PHP с переменными аргументами

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

Решение

Вы должны иметь возможность добавлять такие функции:

$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.

Замечания: Имейте в виду, что именованные аргументы, передаваемые в фильтр с переменным числом аргументов, нельзя
проверяется на действительность, так как они автоматически окажутся в опции
массив.

Тем не менее ... токен как таковой не поддерживается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]