Как передать параметры в блок Symfony2 Twig?

Я хочу генерировать заголовки таблиц в блоке ветки и повторно использовать их на странице, на этой странице имеется около 5 разных таблиц с примерно одинаковыми заголовками. Блок-код таков:

{% block table_headers %}
    <th>Fiscal Year</th>
    <th>End Date</th>
    <th>Period Length</th>
    {% for item in result.FinancialStatements.COAMap.mapItem %}
        {% if item.statementType == statementType %}
            <th>{{ item._ }} ({{ item.coaItem }})</th>
        {% endif %}
    {% endfor %} 
{% endblock %}

Ключевая строка в приведенном выше коде

{% if item.statementType == statementType %}

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

{% render block.table_headers with {'statementType': 'INC'} %}

Но это не работает. Я хочу сохранить блок и его рендеринг в том же файле (но разные блоки), для концептуальной близости.

Можно ли использовать блоки как это? Я просмотрел документы Symfony2 и не нашел ничего, что могло бы сделать это, но это кажется очевидным использованием блоков для меня.

Ответы

Ответ 1

Обновлен тег include в Symfony 2.2, который может помочь вам в этом. Вот пример нового тега: {{ include('FTWGuildBundle:Help:popover.html.twig', {'content':helpContent,'title':helpTitle}) }}

Это может быть то, что вам нужно, поскольку оно позволяет избежать необходимости выполнять подпросу для контроллера (render делает это), он будет лучше выполнять.

В моем примере я включаю HTML для получения справки и предоставления заголовка и контента.

Ответ 3

{% render block.table_headers with {'statementType': 'INC'} %} не распознается Symfony. Вы должны использовать:

{% render "yourBundle:controleur:action" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}

Ответ 4

Похоже, вы хотите, чтобы функция макросов Twig . Альтернативно напишите свой блок как отдельный шаблон и используйте include.

Ответ 6

Для чего это стоит вам. Вот пример того, как я отобразил блоки контента. Это для пакетного приложения, которое отправляет электронные письма, поэтому оно немного отличается от того, что вы пытаетесь, но тем не менее может быть полезно

        $templateContent = $this->getContainer()->get('twig')->loadTemplate('FTWGuildBundle:AuctionNotification:notificationEmail.html.twig');
        $body = $templateContent->renderBlock('body', array('siteDomain' => $siteClient->getSiteDomain(), 'staticContentDomain' => $siteClient->getStaticContentDomain(), 'batch' => $batch->getNotifications(), 'auction_notification_lockout_period' => $this->getContainer()->getParameter('auction_notification_lockout_period')));
        $subject = ($templateContent->hasBlock("subject")
            ? $templateContent->renderBlock("subject", array('batchSize' => $batch->getSize(), 'batch' => $batch))
            : "Auction House Notifications");

Ответ 7

Вызов любого метода класса с параметрами без ключа

{{ attribute(classname, methodname, [parameter1, parameter2]) }}

Вызов любого метода класса с параметрами с ключом

{{ attribute(classname, methodname, {"parameter1": parameter1, "parameter2": parameter2]) }}

Получить свойство массива/объекта

{{ attribute(array, key) }}