Использование переменной 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