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