Załóżmy, że mam dwa szablony Twig zawierające tylko makra:
<!-- macros_a.html.twig -->
{% macro help_icon(msg) -%}
<i class="glyphicon glyphicon-question-sign nf-icon-help" data-toggle="tooltip" title="{{ msg }}"></i>
{%- endmacro %}
i
<!-- macros_b.html.twig -->
{% macro hash(val) -%}
<span class="nf-hash">{{ val }}</span>
{%- endmacro %}
W innym szablonie chcę użyć dowolnego z poniższych makr:
<!-- some_page.html.twig -->
{% import "@App/macros_b.html.twig" as macros %}
<p>Your hash: {{ macros.hash("90a11a5d3268") }}<p>
<p>This is some fuzzy text that needs a help icon. {{ macros.help_icon("Here is some helpfull text for you.") }}</p>
Chcę tego macros_b.html.twig
dziedziczyć makra macros_a.html.twig
i udostępnić wszystkie makra za pomocą jednej zmiennej (macros
).
Sposób, w jaki próbowałem to rozwiązać, polega na użyciu czegoś podobnego include
, import
, extends
Myślę, że wypróbowałem każdą funkcję / znacznik Twig, który jest nieco spokrewniony blocks
ale to nie działa ani. Makra w macros_a.html.twig
po prostu nie są dostępne (komunikat o błędzie: Attempted to call an undefined method named "gethash" of class ..etc..
).
Czy ktoś wie jak to zrobić? Z góry dziękuję!
Odpowiedzi:
0 dla odpowiedzi № 1W makrach nie ma możliwości dziedziczenia
Makra są tworzone w celu generowania treści małej generacji.
Jeśli chcesz, aby były one dostępne w każdym kodzie niezależnie od pliku makra, powinieneś raczej użyć niestandardowego funkcjonować