Twig - 如何有效地重用代码

时间:2015-07-23 14:21:42

标签: symfony templates twig

我有一个页面,用于呈现许多用户的详细信息。每个用户的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>

1 个答案:

答案 0 :(得分:2)

包含是一个非常好的解决方案,完全符合您的需求。

您也可以使用宏(documentation)。但是尝试不在宏中使用includerequire,因为如果在包含的模板中有错误,则错误行将是您调用模板的行(而不是你真的有一个错误)所以它可能变得非常难以调试。

就像你说的那样,对于特定情况,Twig扩展也可能是好的。例如,如果您想显示价格,最好制作|price扩展名,而不是包含一个小模板。但对于高度可重用的代码和短片模板,扩展性更好。

顺便说一下,最糟糕的情况是仅使用render(controller(...))才能显示模板,因为它在内存方面非常耗费。

回答编辑:

Here you will find a benchmark:在很多参数的情况下,扩展似乎是最好的解决方案。在您的简单案例中,两种解决方案都很好。个人而言,当我有很多HTML和很少的参数时,我更喜欢使用包含。但这是一个你喜欢什么的问题。

你甚至可以想象两者兼顾。

  • 包含html小部件
  • 和扩展名,以便连接用户名字和姓氏

像这样:

<span data-tooltip aria-haspopup="true" class="has-tip" title="{{ user.getJob }}, {{ user.getCompanyy.getName }}">
    {{ user|fullName }}
</span>

总之,Twig提供了许多不同的工具,您可以选择适合您需求的工具。