我想在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文档,找不到任何暗示可以做到这一点的内容,但对我来说这似乎是一个明显的块使用。
答案 0 :(得分:12)
Symfony 2.2中的include标签有更新,可能对此有所帮助。以下是新标记的示例:
{{ include('FTWGuildBundle:Help:popover.html.twig', {'content':helpContent,'title':helpTitle}) }}
这可能是您所需要的,因为它避免了对控制器执行子请求(render
这样做),它会更好地执行。
在我的示例中,我将HTML包含在帮助文件夹中并提供标题和内容。
答案 1 :(得分:10)
现在(Symfony 2,3&amp; 4+),我们可以使用和语法:
{% with {
'myVar1': myValue1,
'myVar2': myValue2
}
%}
{{ block('toolbar', myTemplate) }}
{% endwith %}
提交:https://github.com/twigphp/Twig/commit/02b084e2f5c3119604b1c0da388dd2438a012191
答案 2 :(得分:7)
{% render block.table_headers with {'statementType': 'INC'} %}
。你必须使用:
{% render "yourBundle:controleur:action" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}
答案 3 :(得分:6)
听起来你想要Twig的macros feature。或者,将您的块作为单独的模板编写,然后使用include。
答案 4 :(得分:2)
使用block function时,子模板可以访问父变量:
{% set foo = 'bar' %}
{{ block('another_block') }}
在子模板中:
{% block another_block %}
{{ foo }}
{% endblock %}
打印:
bar
答案 5 :(得分:0)
另一种方法是创建一个Twig扩展,参见
http://symfony.com/doc/current/cookbook/templating/twig_extension.html
你的Twig函数负责渲染标题
return $this->renderView("MyBundle:Twig:tableHeader.html.twig", array( 'result' => $result));
答案 6 :(得分:0)
对于你的价值。这是我如何渲染内容块的一个例子。这是一个发送电子邮件的批处理应用程序,所以它与您尝试的有点不同,但是可能会有所帮助
$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 :(得分:0)
使用没有键的参数调用类的任何方法
{{ attribute(classname, methodname, [parameter1, parameter2]) }}
使用带有键的参数调用类的任何方法
{{ attribute(classname, methodname, {"parameter1" : parameter1, "parameter2" : parameter2]) }}
检索数组/对象的属性
{{ attribute(array, key) }}