我有一个页面,用于呈现许多用户的详细信息。每个用户的HTML都很重(工具提示等),所以我不想复制/粘贴相同的代码。我也希望在不同的网页上重复使用相同的代码。
我正在使用 include 参数,但我不确定性能有多好。是否更好的做出 Twig扩展,并且只是有基于传递的User实例生成html的函数?还是有另一种更好的方法吗?
修改
这是我在多个页面上的多个位置呈现的代码。
<span data-tooltip aria-haspopup="true" class="has-tip" title="{{ user.getJob }}, {{ user.getCompanyy.getName }}">
{{ user.getFirstName }}, {{ user.getLastName }}
</span>
答案 0 :(得分:2)
包含是一个非常好的解决方案,完全符合您的需求。
您也可以使用宏(documentation)。但是尝试不在宏中使用include
或require
,因为如果在包含的模板中有错误,则错误行将是您调用模板的行(而不是你真的有一个错误)所以它可能变得非常难以调试。
就像你说的那样,对于特定情况,Twig扩展也可能是好的。例如,如果您想显示价格,最好制作|price
扩展名,而不是包含一个小模板。但对于高度可重用的代码和短片模板,扩展性更好。
顺便说一下,最糟糕的情况是仅使用render(controller(...))
才能显示模板,因为它在内存方面非常耗费。
回答编辑:
Here you will find a benchmark:在很多参数的情况下,扩展似乎是最好的解决方案。在您的简单案例中,两种解决方案都很好。个人而言,当我有很多HTML和很少的参数时,我更喜欢使用包含。但这是一个你喜欢什么的问题。
你甚至可以想象两者兼顾。
像这样:
<span data-tooltip aria-haspopup="true" class="has-tip" title="{{ user.getJob }}, {{ user.getCompanyy.getName }}">
{{ user|fullName }}
</span>
总之,Twig提供了许多不同的工具,您可以选择适合您需求的工具。