Как отобразить содержимое родительского блока в унаследованном виде с помощью TWIG standalone и symfony 2

Если вы пытаетесь добавить какой-либо контент в блок, который уже существует в родительском представлении с помощью twig, и вы заметили, что только контент заменяется, а исходный контент исчезает, возможно, у вас возник вопрос: как включить исходный контент? Когда шаблон использует наследование, можно отобразить содержимое родительского блока при переопределении блока, используя родительскую функцию в twig. Но что это значит? давайте объясним это с помощью кода:

Родительский блок

Для этого примера у нас будет панель инструментов, эта панель инструментов будет простым элементом div со следующим содержимым (находится в файле base.html.twig):


{%block content -%}
{% endblock %}
{%block toolbar -%}

User Normal Action 1


User Normal Action 2

{%endblock%}

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

Унаследованный вид

Если ваше унаследованное представление не использует блок с существующим именем (например, не использует блокировку панели инструментов), вы заметите, что панель инструментов блока будет отображена полностью, как показано в файле base.html.twig:

{% extends '::base.html.twig' %}
{% block content -%}
I'll only change the content of the template but not the toolbar block !
{% endblock content%}

Но если вы решите включить вкладку панели инструментов в унаследованное представление, содержимое этого представления заменит содержимое файла base.html.twig:

{% extends '::base.html.twig' %}
{% block content -%}
I'll change the content
{% endblock content%}
{% block toolbar -%}
The actions links will be removed and this will appear instead ! :(
{% endblock toolbar %}

И то, что я хочу иметь как (содержимое блока панели инструментов base.html.twig, так и новое содержимое), без записи всего в каждом представлении, которое нам нужно, мы будем использовать родительскую функцию для включения содержимого исходного блока без замены. все.

родитель ()

Эта функция ветки получит содержимое существующего блока, чтобы мы могли снова напечатать его в нашем унаследованном представлении. Итак, у нас будут ссылки на действия, и мы добавим 2 новые кнопки без удаления ссылок:

{% extends '::base.html.twig' %}
{% block content -%}
I'll change the content
{% endblock content%}
{% block toolbar -%}
{{parent()}} {# The content of the base.html.twig will be retrieved and printed in this inherited view too#}
User normal action 3 only in this view
User normal action 4 only in this view
{% endblock toolbar %}

Обратите внимание, что родительская функция должна выполняться в унаследованном представлении (не в родительском).

Ссылка на основную публикацию
Adblock
detector