Поддерживает ли TWIG вариативные аргументы с использованием токена «...»?

Я хотел бы предоставить переменное количество аргументов функции из 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?

Twig - это шаблонизатор. Подготовьте свои данные в контроллере.

u_mulder 31.05.2018 12:00

А как насчет того, чтобы функция учитывала контекст? Таким образом, у вас будет доступ ко всем переданным переменным, и вам не нужно будет передавать какие-либо дополнительные

DarkBee 31.05.2018 12:22

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

Kamafeather 31.05.2018 13:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
671
1

Ответы 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")); #}

Вы также можете создать вариативные фильтры:

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, оператор разброса или оператор распространения) как таковой не поддерживается.

Другие вопросы по теме