2011-10-03 66 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:用於定義頁面中的公共部分,如頁眉,側邊欄或插槽。

宏:用於定義與視圖相關的功能,如分頁。