A partir de la versión 2.2 de Symfony, se incluye soporte para rutas de plantillas con namespaces. De esta forma, es posible utilizar rutas como @AcmeDemo/layout.html.twig
. Consulta el artículo How to use and Register namespaced Twig Paths para obtener más detalles.
Por defecto las plantillas se encuentran en dos lugares diferentes:
app/Resources/views/
: el directorio donde se almacenan las plantillas globales de la aplicación, como por ejemplo la plantilla del layout y las plantillas utilizadas para redefinir las plantillas incluidas en los bundles de Symfony2.ruta/hasta/el/bundle/Resources/views/
: los bundles almacenan sus propias plantillas en el directorioResources/views/
de cada bundle. La inmensa mayoría de las plantillas se almacenan dentro de algún bundle.
Symfony2 identifica a cada plantilla con la sintaxis especial bundle:controlador:plantilla. Esto permite definir diferentes tipos de plantilla, cada una almacenada en un lugar diferente:
AcmeBlogBundle:Blog:index.html.twig
: indica la plantilla de una página específica. Este es el significado de cada una de las tres partes de la cadena:AcmeBlogBundle
: (bundle) la plantilla se encuentra dentro del bundleAcmeBlogBundle
(por ejemplo,src/Acme/BlogBundle
).Blog
: (controlador) indica que la plantilla se almacena en el subdirectorioBlog
deResources/views
.index.html.twig
: (plantilla) el nombre del archivo que guarda la plantilla esindex.html.twig
. Suponiendo queAcmeBlogBundle
se encuentre ensrc/Acme/BlogBundle
, la ruta completa de la plantilla seríasrc/Acme/BlogBundle/Resources/views/Blog/index.html.twig
.
AcmeBlogBundle::layout.html.twig
: indica que es una plantilla global del bundle indicado. Como falta la parte central que se refiere al controlador, esta plantilla no se encuentra dentro de ningún subdirectorio deResources/views/
. En otras palabras, la ruta completa de la plantilla esResources/views/layout.html.twig
dentro del bundleAcmeBlogBundle
.::base.html.twig
: indica que es una plantilla global de la aplicación. Observa que la cadena comienza con dos pares de dos puntos (::
), por lo que falta la parte del bundle y la del controlador. En otras palabras, esta plantilla no se encuentra en ningún bundle sino directamente dentro deapp/Resources/views/
.
Más adelante se explica cómo se pueden reemplazar las plantillas de un bundle como AcmeBlogBundle
, creando nuevas plantillas en el directorio app/Resources/AcmeBlog/views/
. Esto significa que tu aplicación puede redefinir cualquier plantilla incluida en cualquier bundle.
Truco La nomenclatura para referirse a las plantillas seguramente te resulta familiar, ya que es la misma que se emplea para identificar a los controladores de la aplicación.
7.3.1. Sufijo de plantilla
La sintaxis bundle:controlador:plantilla de cada plantilla, especifica dónde se encuentra el archivo de plantilla. Además, cada plantilla incluye dos extensiones que especifican el formato y motor de esa plantilla.
- AcmeBlogBundle:Blog:index.html.twig: formato HTML, motor Twig.
- AcmeBlogBundle:Blog:index.html.php: formato HTML, motor PHP.
- AcmeBlogBundle:Blog:index.css.twig: formato CSS, motor Twig.
Las plantillas de Symfony2 se pueden crear con Twig o con PHP. La última extensión (.twig
o .php
) indica el motor de plantillas utilizado. La primera extensión, (.html
, .css
, etc.) es el formato del contenido que genera la plantilla. A diferencia del motor, que determina cómo procesa Symfony2 la plantilla, esta primera extensión es simplemente una convención que se utiliza para facilitar la generación de un mismo contenido en diferentes formatos (ejemplo: index.html.twig
, index.xml.twig
, etc.).
Nota Los motores de plantillas disponibles se pueden configurar e incluso puedes añadir nuevos motores. Consulta más adelante la sección Configuración de plantillas para más detalles.