2016-12-29 9 views
1

Предположим, у меня есть два шаблона Twig, содержащие только макросы: Как сделать один шаблон макроса Twig наследовать другой и использовать макросы в том же пространстве имен?

<!-- macros_a.html.twig --> 
{% macro help_icon(msg) -%} 
    <i class="glyphicon glyphicon-question-sign nf-icon-help" data-toggle="tooltip" title="{{ msg }}"></i> 
{%- endmacro %} 

и

<!-- macros_b.html.twig --> 
{% macro hash(val) -%} 
    <span class="nf-hash">{{ val }}</span> 
{%- endmacro %} 

В другом шаблоне я хочу использовать любой из этих макросов, как это:

<!-- 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> 

Что Я хочу, чтобы macros_b.html.twig наследовал макросы от macros_a.html.twig и сделал доступными все макросы t через одну переменную (macros).

Как я пытался решить эту проблему, чтобы использовать что-то вроде include, import, extends, я думаю, что я попробовал все Twig функцию/тэг, несколько связанных. Я также пытался использовать blocks, но это не работает. Макросы в macros_a.html.twig просто недоступны (сообщение об ошибке: Attempted to call an undefined method named "gethash" of class ..etc..).

Кто-нибудь знает, как сделать эту работу? Заранее спасибо!

ответ

0

Там нет наследования можно с помощью макросов

Макросов сделаны, чтобы сделать небольшое содержание поколения.

Если вы хотите, чтобы они были доступны в everyscope независимо от файла макросов, вы должны использовать пользовательские настройки function