如何将参数传递给Symfony2 Twig块?

2022-08-30 16:34:39

我想在树枝块中生成表格标题,并在整个页面中重复使用它们,此页面有大约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 %}

我想将语句Type作为参数传递到我正在渲染块的位置,如下所示:

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

但这行不通。我想将块及其渲染保留在同一个文件(但不同的块)中,以实现概念上的接近。

甚至有可能使用这样的块吗?我查看了Symfony2文档,找不到任何建议可以做到这一点的东西,但对我来说,这似乎是对块的明显使用。


答案 1

现在使用Symfony v2 +(3,4和5,自Twig v1.28.0起),我们可以使用关键字在函数上使用自定义模板:block()with

{% with {
            'myVar1': myValue1,
            'myVar2': myValue2
        }
%}
        {{ block('toolbar', myTemplate) }}
{% endwith %}

提交:https://github.com/twigphp/Twig/commit/02b084e2f5c3119604b1c0da388dd2438a012191


答案 2

Symfony 2.2 中的 include 标记有一个更新,可能会对此有所帮助。下面是新标记的示例:{{ include('FTWGuildBundle:Help:popover.html.twig', {'content':helpContent,'title':helpTitle}) }}

这可能是你需要的,因为它避免了必须对控制器做子请求(这样做),它会表现得更好。render

在我的示例中,我包含了帮助弹出框的 HTML,并提供了标题和内容。


推荐