2011-10-03 15 views
13

Nie mogę naprawdę zrozumieć różnicy między makrami i obejmuje w Twig: oba wydają się robić te same rzeczy, to wziąć niektóre zmienne i coś wyjściowego.Twig macros VS zawiera?

Jaka jest różnica i dlaczego korzystasz z makr lub dołączasz?

Odpowiedz

16

Zawiera, aby dołączyć cały szablon, dosłownie. Ten szablon miałby dostęp do dowolnych zmiennych szablonów, które są aktualnie objęte zakresem.

Przy pomocy makr definiujesz rodzaj funkcji w Twig (nie mylić z funkcją Twig, która może uzyskać dostęp do innej logiki aplikacji, a nie tylko danych przekazywanych do szablonów), która może renderować dany komponent z odpowiednimi obiektami. Więc możesz mieć makro do renderowania, powiedzmy, listę zakupów, która bierze listę zakupów jako parametr - i możesz wtedy ponownie użyć tego makra bez obawy, czy przekazałeś dane do szablonu w ten sam sposób w innym miejscu. Zmienne, które nie zostały jawnie przekazane do makra, nie mieszczą się w zakresie wewnątrz tego makra.

Makro powinno naprawdę wykonać jedno określone zadanie, aby pobrać pewne dane i utworzyć składnik wielokrotnego użytku. Zawarcie może zawierać dowolną porcję rzeczy - o wiele więcej zależy od Ciebie. Rozszerzalny charakter sposobu działania szablonów Twig, w przeciwieństwie do czegoś podobnego do Smarty, oznacza, że ​​najprawdopodobniej będziesz używać mniej, według projektu - ale nadal mogą być przypadki użycia, w których będzie to najprostszy sposób uniknięcia powielania w szablonach .

+6

Część o szablonie ** miałaby dostęp do dowolnych zmiennych szablonu znajdujących się obecnie w zakresie ** nie jest całkowicie poprawna. Możesz to zrobić: '{% include 'template.html.twig' z {'custom_var': custom_value} only%}', które uniemożliwiłyby dołączonemu szablonowi dostęp do kontekstu nadrzędnego. To sprawi, że funkcja 'include' będzie bardzo podobna do' macro', z tą różnicą, że są one deklarowane i wywoływane. – Karolis

2

Jestem nowy w Symfony2, ale myślę, że różnica między makro gałązka i dodać jest następująca.

include: Służy do definiowania części wspólnych na stronie, takich jak nagłówek, pasek boczny lub szczelina.

makro: Służy do definiowania funkcji związanych z widokiem, takich jak paginacja.