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

Я пытаюсь использовать переменную для вызова определенного имени макроса.

у меня есть файл с макросами, который импортируется

{% import 'form-elements.html.twig' as forms %}

теперь в этом файле есть все макросы элементов формы: text, textarea, select, radio и т. д.

у меня есть переменная массива, которая передается, в которой есть элементы:

$elements = array(
    array(
        'type'=>'text,
        'value'=>'some value',
        'atts'=>null,
    ),
    array(
        'type'=>'text,
        'value'=>'some other value',
        'atts'=>null,
    ),
);

{{ elements }}

что я пытаюсь сделать, это создать эти элементы из макросов. они работают просто отлично, когда звонят имя:

{{ forms.text(element.0.name,element.0.value,element.0.atts) }}

однако то, что я хочу сделать, это что-то вроде этого:

{% for element in elements %}
{{ forms[element.type](element.name,element.value,element.atts) }}
{% endfor %}

я попробовал следующее, что привело к той же ошибке:

{{ forms["'"..element.type.."'"](element.name,element.value,element.atts) }}
{{ forms.(element.type)(element.name,element.value,element.atts) }}
{{ forms.{element.type}(element.name,element.value,element.atts) }}

это, к сожалению, выдает следующую ошибку:

 Fatal error: Uncaught exception 'LogicException' with message 'Attribute "value" does not exist for Node "Twig_Node_Expression_GetAttr".' in TwigEnvironment.php on line 541

любая помощь или совет по решению или лучшей схеме для использования было бы очень полезно.

1 ответов


Я просто подумал, что другие люди могут захотеть получить ответ на этот вопрос, как обеспечивает fabpot:

Это действительно то, что не поддерживается: вызов макроса с динамическим именем (я добавил правильное исключение, чтобы быть более ясным о проблеме).

Если вы действительно хотите это сделать, вы можете сделать это со следующим кодом:

{{ attribute (forms, element.типа, [элемент.имя,элемент.значение,элемент.ООО "АТЦ"]) }}

-fabpot

https://github.com/twigphp/Twig/issues/922#issuecomment-11133299