2011-10-03 104 views
13

我无法真正理解包括在Twig中的区别:两者似乎都做同样的事情,即采取一些变量并输出一些东西。Twig宏VS包括?

有什么区别,为什么你使用宏或包含?

回答

16

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

使用宏,您可以在Twig中定义一种函数(不要与Twig函数混淆,Twig函数可以访问其他应用程序逻辑,而不仅仅是传递给模板的数据),这些函数可以渲染给定的对象的特定组件。所以你可以有一个宏来呈现,比如购物清单,它将购物清单作为一个参数 - 然后你可以重用这个宏而不必担心是否将数据以相同的方式传递到了模板中。未明确传递给宏的变量不在该宏的范围内。

一个宏应该真的做一个特定的任务来获取一些数据并呈现一个可重用的组件。一个包含可以包含任何大块的东西 - 它更多取决于你。 Twig模板的工作方式的可扩展性与Smarty类似,意味着您可能会使用包含更少的设计 - 但仍然有一些用例可能会避免模板中的重复。

+6

有关**模板的部分可以访问当前在范围内的任何模板变量**并不完全正确。你可以这样做:'{%include'template.html.twig'with {'custom_var':custom_value} only%}'这将阻止包含的模板访问父上下文。这将使'include'功能与'macro'非常相似,主要区别在于它们是如何声明和调用的。 – Karolis

2

我是Symfony2的新手,但我认为树枝宏和包含的区别如下。

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

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