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.