Я хотел бы предоставить переменное число аргументов функции из 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
?
Вы должны иметь возможность добавлять такие функции:
$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.
Замечания: Имейте в виду, что именованные аргументы, передаваемые в фильтр с переменным числом аргументов, нельзя
проверяется на действительность, так как они автоматически окажутся в опции
массив.
Тем не менее ...
токен как таковой не поддерживается.
Других решений пока нет …