Ver índice de contenidos del libro

7.9. Herencia de tres niveles

La manera más habitual de aplicar la herencia de plantillas consiste en utilizar un modelo a tres niveles. Además, este método se adapta perfectamente a los tres tipos de plantilla que acabamos de ver:

1. Crea un archivo llamado app/Resources/views/base.html.twig que contenga el diseño principal de tu aplicación (como en el ejemplo anterior). Internamente, esta plantilla se identifica con la notación ::base.html.twig.

2. Crea una plantilla para cada sección de tu sitio. Por ejemplo, AcmeBlogBundle, tendría una plantilla llamada AcmeBlogBundle::layout.html.twig que sólo contiene los elementos específicos de la sección del blog;

{# src/Acme/BlogBundle/Resources/views/layout.html.twig #}
{% extends '::base.html.twig' %}
 
{% block body %}
  <h1>Blog Application</h1>
 
  {% block content %}{% endblock %}
{% endblock %}

3. Crea plantillas individuales para cada página y haz que cada una extienda la plantilla de la sección adecuada. Por ejemplo, la página de índice será AcmeBlogBundle:Blog:index.html.twig y simplemente muestra el listado de artículos del blog.

{# src/Acme/BlogBundle/Resources/views/Blog/index.html.twig #}
{% extends 'AcmeBlogBundle::layout.html.twig' %}
 
{% block content %}
  {% for entry in blog_entries %}
      <h2>{{ entry.title }}</h2>
      <p>{{ entry.body }}</p>
  {% endfor %}
{% endblock %}

Ten en cuenta que esta plantilla extiende la plantilla base del bundle (AcmeBlogBundle::layout.html.twig), que a su vez, extiende la plantilla de la aplicación (::base.html.twig). Este es el modelo común de herencia a tres niveles.

Al desarrollar tu aplicación puedes optar por este método o por hacer que todas las plantillas extiendan directamente de la plantilla base global (por ejemplo, {% extends '::base.html.twig' %}). El modelo que define una plantilla base para cada bundle es una buena práctica recomendada porque facilita que puedas adaptar los bundles de terceros al diseño de tu aplicación.