Вы должны иметь возможность добавлять такие вариационные функции:
$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.
Примечание: Будьте предупрежденычто именованные аргументы, передаваемые в фильтр с переменными параметрами, не могут быть проверены на достоверность, поскольку они автоматически окажутся в массиве параметров.
Однако оператор ...
(также известный как оператор сплата, оператор разброса илиоператор распространения) как таковой не поддерживается.