La nueva notación para las plantillas Twig

En el repositorio oficial de la documentación de Symfony se ha iniciado una discusión bastante activa sobre cómo deben llamarse las plantillas Twig dentro de las aplicaciones Symfony2. Si tu aplicación tiene la siguiente estructura simple con cuatro plantillas:

tu-proyecto/
 ├─ app/
 │  └─ Resources
 │     └─ views/
 │        └─ plantilla1.twig
 ├─ src/
 │  └─ Acme/
 │     └─ Bundle/
 │        └─ DemoBundle/
 │           └─ Resources
 │              └─ views/
 │                 ├─ plantilla2.twig
 │                 └─ Default/
 │                    ├─ plantilla3.twig
 │                    └─ common/
 │                       └─ plantilla4.twig
 ├─ vendor/
 └─ web/

Utilizando la notación habitual Bundle:Controlador:plantilla, cada una de estas plantillas se accede de una manera diferente:

::plantilla1.twig
AcmeDemoBundle::plantilla2.twig
AcmeDemoBundle:Default:plantilla3.twig
AcmeDemoBundle:Default/common:plantilla4.twig
(también funciona: AcmeDemoBundle:Default:common/plantilla4.twig)

Sin embargo, desde hace más de un año las plantillas Twig de las aplicaciones Symfony utilizan namespaces. Symfony2 asocia automáticamente cada plantilla con un namespace formado por el nombre del bundle. Por eso, con la nueva notación puedes llamar a tus plantillas de la siguiente manera:

plantilla1.twig
@AcmeDemoBundle/plantilla2.twig
@AcmeDemoBundle/Default/plantilla3.twig
@AcmeDemoBundle/Default/common/plantilla4.twig

Aunque las dos notaciones parecen casi idénticas, la ventaja de la segunda es que es más parecido a una ruta normal de un archivo. En la notación tradicional siempre tienes que definir tres partes, incluso cuando alguna de ellas está vacía (por eso los :: en AcmeDemoBundle::plantilla2.twig).

En la nueva notación todo es más sencillo de entender, especialmente si eres nuevo en Symfony. Ya no importa si dentro de Resources/views/ tus directorios se corresponden a controladores o no. Y tampoco importa cuántos subdirectorios crees en cada uno de esos directorios. Simplemente indica la ruta directa a la plantilla ¡y ya está!

Personalmente creo que esta nueva notación tiene muchas ventajas y por eso apoyo la idea de Grégoire Pineau de actualizar toda la documentación oficial de Symfony. Sin embargo, otros programadores Symfony han expresado algunas dudas:

  • La notación tradicional no ha sido declarada obsoleta, por lo que sería un poco confuso mantener las dos notaciones.
  • La nueva notación no está soportada en las plantillas PHP, por lo que sería otra diferencia entre PHP y Twig.
  • Si se cambia la documentación oficial, todos los libros, tutoriales, posts y screencats de la comunidad se quedarían obsoletos por utilizar la notación tradicional.

Y tú, ¿qué notación utilizas en tus aplicaciones Symfony? ¿Cuál te gusta más?

Comentarios

  1. Lo veo bien pero me es indistinto me da igual usar cualquier opción pero siempre soy más conservador y prefiero seguir con la notacion Bundle:Controlador:plantilla por convención...

    Maikel Suárez Corrales el 13 de mayo de 2014, 16:47:23

  2. Creo que la propuesta es basntante buena y más sencilla de entender.

    El único problema para mi es el segundo punto que mencionas:

    • "La nueva notación no está soportada en las plantillas PHP, por lo que sería otra diferencia entre PHP y Twig".

    El punto 1 y 3 no tienen porque tener mayor problema, toda mejora lleva cambios fuertes, si no basta con recordar el cambio de Symfony1. a 2.

    Saludos

    Euler Sànchez Gòmez el 14 de mayo de 2014, 18:33:03

  3. Habría que pensar que otras cosas más podría afectar esta modificación, por ejemplo se me ocurre cuando realizas el CRUD desde app/console, automáticamente te crea directorios para tus plantillas dentro de Resources/views, con esta nueva notación tal vez habría que indicarle en dónde quieres que sean colocadas. Hasta ahora me gusta más la notación actual ya que es más representativa para saber directamente dónde buscar las plantillas en bundles de terceros.

    luis tejero el 16 de mayo de 2014, 19:07:25

  4. Este es mi primer comentario en tan útil blog; que me ayudo mucho en seguir y aprender el camino de la Fuerza...

    Personalmente no me parece tan relevante el cambio (reemplazar ":" por "/" a simple vista) como para actualizar la documentación o inclusive declarar obsoleta la anterior notación.

    Creo que se deberia mantener solo como una alternativa así como existe en la documentación ejemplos en XML, YML y anotaciones.

    PD: Siempre entre días entro al blog para buscar novedades. No dejes de escribir por favor...

    Nick Palomino el 18 de mayo de 2014, 0:18:28

  5. La nueva notación me parece bien. Sin embargo adhiero a la idea de que el cambio se haga de a poco, no se tiene que declarar obsoleta la notación actual a mi parecer, debería soportar ambas y en algún momento, como se ha hecho ya varias veces ante un cambio de versión relevante descartar las compatibilidades hacia atras. En mi caso, a pesar de que la documentación de symfony2 puede ser o no el punto de partida, siempre me resultó muy útil leer artículos de blogs. Creo que es un recurso muy valioso para los que comienzan con symfony2.

    Gabriel Dias el 22 de mayo de 2014, 17:29:40

  6. Me gusta esta manera de organizar en forma de subdirectorios, supongo que eso se aplica al renderear desde el controlador cierto? pero cuando intento hacer un include desde otra plantilla twig me da un error y dice que el formato es incorrecto (y me dice que debe ser bundle:controller:template.format.engine

    Sergio Enrique Vargas el 25 de mayo de 2014, 21:25:24

  7. IMHO, en lugar de crear una notación nueva, intentaría mantener la notación actual eliminando posibilidades de uso. No creo que sea muy correcto separar un nivel de carpeta como un "parámetro" nuevo.

    Hay un caso que no has contemplado en el post que es el siguiente:

    AcmeDemoBundle:Default:plantilla3.twig

    AcmeDemoBundle::Default/plantilla3.twig

    Ambos casos funcionan, y quizá preferiría dejar una sola forma de referenciar a las plantillas, eliminando la posibilidad del primer ejemplo. De esa forma, tanto si la plantilla está en un primer nivel de carpetas como si está en un nivel N, la notación sería la misma.

    Ariel Ferrandini el 2 de junio de 2014, 8:55:11

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

13 de mayo de 2014

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.