Я хотел бы предоставить переменное количество аргументов функции из 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?
А как насчет того, чтобы функция учитывала контекст? Таким образом, у вас будет доступ ко всем переданным переменным, и вам не нужно будет передавать какие-либо дополнительные
@DarkBee не уверен, что это сработает. Как определить, какие переменные контекста являются аргументами моей функции? (Я добавил больше примеров) - Моя цель - передать массив аргументов вслепую, без необходимости доступа к переменным по имени (callFunction не знает номер / имена вызываемый)






Вы должны иметь возможность добавлять такие вариативные функции:
$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")); #}
Вы также можете создать вариативные фильтры:
When a filter should accept an arbitrary number of arguments, set the is_variadic option to true; Twig will pass the extra arguments as the last argument to the filter call as an array:
$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.
Note: Be warned that named arguments passed to a variadic filter cannot be checked for validity as they will automatically end up in the option array.
Однако оператор ... (также известный как оператор splat, оператор разброса или оператор распространения) как таковой не поддерживается.
Twig - это шаблонизатор. Подготовьте свои данные в контроллере.