Динамически вызывать макрос в Twig? - PullRequest
4 голосов
/ 04 марта 2012

Можно ли динамически вызывать макрос в Twig? Например, вот шаблон и макрос с именем «группа», который строит группу кнопок, используя аргумент buttons array. Есть также два других макроса, save и delete, для построения кнопок сохранения и удаления.

{# Make a group of buttons #}
{% macro group(buttons) %}
{% spaceless %}
    {% import "::macros.html.twig" as macros %}

    {% set content = '' %}

    {% for button in buttons %}
        {% set content = content ~ button %}
    {% endfor %}

    {{ macros.el('div', content, { 'class' : 'btn-group' }) }}
{% endspaceless %}
{% endmacro %}

{# Make a save button #}
{% macro save(attributes, size, image) %}
{% spaceless %}
    {{ _self.primary('save'|trans({}, 'buttons'), attributes, size, image) }}
{% endspaceless %}
{% endmacro %}

{# Make a delete button #}
{% macro delete(attributes, size, image) %}
{% spaceless %}
    {{ _self.danger('delete'|trans({}, 'buttons'), attributes, size, image) }}
{% endspaceless %}
{% endmacro %}

Это прекрасно работает, передавая array кнопок:

{% import "::buttons.html.twig" as buttons %}
{% set items = [buttons.save, buttons.delete] %}
{{ buttons.group(items) }}

Но я бы хотел передать имена макросов в group макрос:

{% import "::buttons.html.twig" as buttons %}
{{ buttons.group(['save', 'delete']) }}

и макросы save и delete вызываются автоматически. Это возможно и как?

Ответы [ 2 ]

0 голосов
/ 02 июля 2015

Для тех, кто ищет пример того, как реализовать динамический вызов макроса с использованием атрибута, проверьте https://gist.github.com/tentacode/9728963b9f3a714608f3

0 голосов
/ 22 марта 2012

почему бы просто не сделать

{% import "::buttons.html.twig" as buttons %}
{{ buttons.group([buttons.save, buttons.delete]) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...