Twig宏VS包括?

时间:2011-10-03 04:09:58

标签: symfony macros include twig

我无法真正理解Twig中包含之间的区别:两者似乎都做同样的事情,即采取一些变量并输出一些东西。< / p>

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

3 个答案:

答案 0 :(得分:18)

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

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

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

答案 1 :(得分:1)

我是Symfony2的新手,但我认为twig宏和include之间的区别如下。

include:用于定义页面中的公共部分,例如标题,侧边栏或插槽。

宏:用于定义与视图相关的功能,例如分页。

答案 2 :(得分:1)

即使这个问题的答案是可以接受的,但我认为重要的是指出树枝中includemacro之间的一些关键区别。

  1. (很明显):您可以在一个文件中定义多个宏,从而每个文件可以有多个可重用的代码块。始终始终包含一个include,因此每个文件一个可重复使用的代码块。

  2. 如果您打算在循环中使用它,则这两个选项之间的性能会有显着差异。根据我的1万次迭代测试,以下是渲染模板的时间:

  • 原始HTML:0.0015秒
  • 宏:0.040秒(慢27倍)
  • 包括:0.1584s(慢105倍)

在此迭代之外调用了宏import

  1. 如果使用include '...' with {...},则将整个上下文传递给包含的模板,并且所有上下文变量(参数)都是可选的。使用宏,您可以定义必需的参数,这有时很方便。

  2. 您可以在调用宏的同一模板中定义宏。使用include不可能。

  3. 要使用宏,您的模板中至少需要2条语句:一个用于导入宏,另一个用于使用宏。使用include只是一种说法,更干净。