Symfony 2.1, el libro oficial

7.3. Nomenclatura y localización de las plantillas

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 directorio Resources/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 bundle AcmeBlogBundle (por ejemplo, src/Acme/BlogBundle).
    • Blog: (controlador) indica que la plantilla se almacena en el subdirectorio Blog de Resources/views.
    • index.html.twig: (plantilla) el nombre del archivo que guarda la plantilla es index.html.twig. Suponiendo que AcmeBlogBundle se encuentre en src/Acme/BlogBundle, la ruta completa de la plantilla sería src/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 de Resources/views/. En otras palabras, la ruta completa de la plantilla es Resources/views/layout.html.twig dentro del bundle AcmeBlogBundle.
  • ::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 de app/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.