Twig宏VS包括?

gre*_*emo 15 macros include symfony twig

我无法真正理解包含在Twig 之间的区别:两者似乎做同样的事情,即采取一些变量和输出的东西.

有什么区别以及为什么使用宏或包含?

小智 18

使用包含,您将逐字包含整个模板.该模板可以访问当前范围内的任何模板变量.

使用宏,您可以在Twig中定义一种函数(不要与Twig函数混淆,后者可以访问其他应用程序逻辑,而不仅仅是传递到模板中的数据),它们可以在给定适当对象的情况下呈现特定组件.因此,您可以使用宏来呈现,例如,将购物清单作为参数的购物清单 - 然后您可以重复使用此宏,而无需担心您是否以与其他地方相同的方式将数据传递到模板中.未明确传递给宏的变量不在该宏的范围内.

宏应该真正执行一项特定任务来获取一些数据并呈现可重用的组件.包含可以包含任何大部分内容 - 它更多取决于您.Twig模板工作方式的可扩展性,与Smarty相反,意味着您可能会在设计中使用包含更少的包含 - 但仍有一些用例,它将是避免模板中重复的最简单方法.

  • 关于**模板的部分可以访问当前范围内的任何模板变量**并不完全正确.您可以:`{%include'template.html.twig'与{'custom_var':custom_value} only%}`这将阻止包含的模板访问父上下文.这将使`include`功能与`macro`非常相似,主要区别在于它们的声明和调用方式. (11认同)