我无法真正理解Twig中宏和包含之间的区别:两者似乎都做同样的事情,即采取一些变量并输出一些东西。< / p>
有什么区别以及为什么使用宏或包含?
答案 0 :(得分:18)
使用包含,您将逐字包含整个模板。该模板可以访问当前范围内的任何模板变量。
使用宏,您可以在Twig中定义一种函数(不要与Twig函数混淆,后者可以访问其他应用程序逻辑,而不仅仅是传递到模板中的数据),它们可以在给定适当对象的情况下呈现特定组件。因此,您可以使用宏来呈现,例如,将购物清单作为参数的购物清单 - 然后您可以重复使用此宏,而无需担心您是否以与其他地方相同的方式将数据传递到模板中。未明确传递给宏的变量不在该宏的范围内。
宏应该真正执行一项特定任务来获取一些数据并呈现可重用的组件。包含可以包含任何大部分内容 - 它更多取决于您。 Twig模板工作方式的可扩展性,与Smarty相反,意味着您可能会在设计中使用包含更少的包含 - 但仍有一些用例,它将是避免模板中重复的最简单方法
答案 1 :(得分:1)
我是Symfony2的新手,但我认为twig宏和include之间的区别如下。
include:用于定义页面中的公共部分,例如标题,侧边栏或插槽。
宏:用于定义与视图相关的功能,例如分页。
答案 2 :(得分:1)
即使这个问题的答案是可以接受的,但我认为重要的是指出树枝中include
和macro
之间的一些关键区别。
(很明显):您可以在一个文件中定义多个宏,从而每个文件可以有多个可重用的代码块。始终始终包含一个include,因此每个文件一个可重复使用的代码块。
如果您打算在循环中使用它,则这两个选项之间的性能会有显着差异。根据我的1万次迭代测试,以下是渲染模板的时间:
在此迭代之外调用了宏import
。
如果使用include '...' with {...}
,则将整个上下文传递给包含的模板,并且所有上下文变量(参数)都是可选的。使用宏,您可以定义必需的参数,这有时很方便。
您可以在调用宏的同一模板中定义宏。使用include不可能。
要使用宏,您的模板中至少需要2条语句:一个用于导入宏,另一个用于使用宏。使用include只是一种说法,更干净。