Twig - 如何有效地重用代码
Twig - how to efficiently re-use code
我有一个页面,其中呈现了许多用户的详细信息。每个用户的 html 都很重(工具提示等)所以我不想 copy/paste 相同的代码。我也想在不同的页面上重复使用相同的代码。
我正在使用带参数的 include,但我不确定性能会有多好。做一个 Twig extension 并且只让函数根据传递的 User 实例生成 html 更好吗?或者还有其他更好的方法吗?
编辑:
这是我在多个页面的多个位置呈现的代码。
<span data-tooltip aria-haspopup="true" class="has-tip" title="{{ user.getJob }}, {{ user.getCompanyy.getName }}">
{{ user.getFirstName }}, {{ user.getLastName }}
</span>
Include 是一个非常好的解决方案,完全符合您的需求。
您也可以使用宏 (documentation)。但是尽量不要在宏中使用 include
或 require
,因为如果包含的模板中有错误,错误行将是您调用模板的行(而不是调用模板的行)你真的有一个错误)所以调试起来会变得非常困难。
就像你说的,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 提供了很多不同的工具,您可以选择适合您需要的工具。
我有一个页面,其中呈现了许多用户的详细信息。每个用户的 html 都很重(工具提示等)所以我不想 copy/paste 相同的代码。我也想在不同的页面上重复使用相同的代码。
我正在使用带参数的 include,但我不确定性能会有多好。做一个 Twig extension 并且只让函数根据传递的 User 实例生成 html 更好吗?或者还有其他更好的方法吗?
编辑:
这是我在多个页面的多个位置呈现的代码。
<span data-tooltip aria-haspopup="true" class="has-tip" title="{{ user.getJob }}, {{ user.getCompanyy.getName }}">
{{ user.getFirstName }}, {{ user.getLastName }}
</span>
Include 是一个非常好的解决方案,完全符合您的需求。
您也可以使用宏 (documentation)。但是尽量不要在宏中使用 include
或 require
,因为如果包含的模板中有错误,错误行将是您调用模板的行(而不是调用模板的行)你真的有一个错误)所以调试起来会变得非常困难。
就像你说的,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 提供了很多不同的工具,您可以选择适合您需要的工具。