Как упорядочить ваши шаблоны Twig, используя наследование

Дата обновления перевода 2023-06-30

Как упорядочить ваши шаблоны Twig, используя наследование

Одним из распротранённых способов использовать наследоваие является трёхуровневый подход. Этот метод идеально работает с тремя разными видами шаблонов, которые только что описывались:

  • Создайте файл app/Resources/views/base.html.twig, который содержит главный макет для вашего приожения (как в предыдущем примере). Внутренне, этот шаблон называется base.html.twig;
  • Создайте шаблон для каждого "раздела" вашего сайта. Например, функциональность блога будет иметь шаблон под названием blog/layout.html.twig, который содержит только элементы, относящиеся к блогу;

    1
    2
    3
    4
    5
    6
    7
    8
    {# app/Resources/views/blog/layout.html.twig #}
    {% extends 'base.html.twig' %}
    
    {% block body %}
        <h1>Blog Application</h1>
    
        {% block content %}{% endblock %}
    {% endblock %}
  • Создайте индивидуальные шаблоны для каждой страницы и сделайте так, чтобы каждый расширял соответствующую часть шаблона. Например, главная страница "index" будет называться как-то вроде blog/index.html.twig и перечислять актуальные записи блога.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {# app/Resources/views/blog/index.html.twig #}
    {% extends 'blog/layout.html.twig' %}
    
    {% block content %}
        {% for entry in blog_entries %}
            <h2>{{ entry.title }}</h2>
            <p>{{ entry.body }}</p>
        {% endfor %}
    {% endblock %}

Заметьте, что этот шаблон расширяет раздел шаблона (blog/layout.html.twig), который, в свою очередь, расширяет базовый макет приложения (base.html.twig). Это распространённая модель трёхуровневого наследования.

При построении вашего приложения, вы можете решить следовать этому методу, или просто делать так, чтобы шаблон каждой страницы расширял базовый щаблон приложения напрямую (например, {% extends 'base.html.twig' %}). Модель трёх шаблонов - это наилучшая практика, используемая пакетами-поставщиками, чтобы базовый шаблон пакета можно было легко переопределить для правильного расширения базового макета вашего приложения.