Peticiones Ajax con Symfony 3
Peticiones Ajax con Symfony 3

Seguimos los tutoriales de Symfony 3, en esta ocasión sobre el motor de plantillas Twig en Symfony, este es el sistema de templates que Symfony utiliza y recomienda para el desarrollo de las vistas.

Twig nos ofrece muchas posibilidades, y junto con Symfony todavía más, entre otras la posibilidad de reutilizar controladores en las templates utilizando render() y controller(), algo muy útil.

¿Por qué utilizar Twig?, entre otras cosas por su sintaxis sencilla, escape automático de html y la inclusión de funciones personalizadas y filtros que sólo afecten a las templates, estas son sólo algunas de las ventajas que podemos encontrar.

Tutoriales que te pueden ser útiles:

Antes de empezar y ya que puede ser algo muy utilizado y está relacionado con las templates, vamos a ver cómo podemos instalar bootstrap utilizando Bower en Symfony 3, para ello primero crea un archivo llamado .bowerrc en la raíz de la aplicación, este archivo es buscado por bower antes de ubicar las dependencias, así le podemos decir donde queremos que sean alojadas, ahora abre el archivo y añade lo siguiente.


A través de la clave directory le decimos que debe alojar las dependencias en web/assets/vendor, ahora ejecuta los siguientes comandos en su orden.

El motor de plantillas Twig en Symfony

Ahora que ya tenemos bootstrap en nuestro proyecto abre la template app/Resources/views/base.html.twig y modifica el código por el siguiente para tener bootstrap disponible en todas las templates que extiendan de esta.


De esta forma tan sencilla ya hemos visto cómo crear un comentario en twig y como añadir la hoja de estilos haciendo uso de la función asset dentro del bloque stylesheets.

Ahora vamos a simular que tenemos un controlador llamado HomeController y utilizamos Doctrine para obtener datos de la base de datos y pasarlos a la vista.


De esta forma ya tendremos una variable llamada page_title y las categorías que tengamos en base de datos, para mostrar estos datos en la vista asociada simplemente vamos a añadir el siguiente código en la template.


Primero le decimos a esta template que herede de la template base.html.twig con la palabra clave extends, después definimos los bloques title y body, imprimimos la variable page_title haciendo uso del filtro upper, así el contenido de page_title será impreso en mayúsculas y finalmente recorremos las categorías haciendo uso de un for no sin antes utilizar un if para comprobar que existen categorías.

La función include en Twig

En lugar de tener que definir el contenido de cada categoría en la misma template podemos ubicar ese código en otro archivo y simplemente llamarlo, para ello vamos a crear un nuevo archivo dentro de src/AppBundle/Resources/views/Home llamado category_detail.html.twig y vamos a añadir el siguiente código.


Ahora sólo debemos modificar el archivo anterior para utilizar esta template.

render() y controller() en Twig con Symfony

Imagina que quieres utilizar el método indexAction del controlador HomeController en otra template, es tan sencillo como la línea que sigue.


De esta forma podremos reutilizar código de forma realmente sencilla.

Variables globales en Twig con Symfony

Symfony también tiene pensadas las cosas que más vamos a necesitar en las vistas, por ello pone de forma automática a nuestra disposición las siguientes variables.

  • app.user: El objeto user del usuario actual.
  • app.request: El objeto request.
  • app.session: El objeto session.
  • app.environment: El entorno actual (dev, prod, etc).
  • app.debug: True si está en modo debug, False en otro caso.

La función dump

En php tenemos la función var_dump para poder ver la información de objetos o arrays, en twig no podemos acceder a las funciones de php, pero twig tiene la función dump la cuál hace lo mismo y viene optimizada en Symfony.


El resultado será el siguiente.

Función dump symfony twig

¿Tremendo no?.

Para e impares en Twig con cycle()

Gracias a la función cycle() de Twig también podemos iterar asignando clases a elementos pares o impares.

Definir variables en Twig

También tenemos la posibilidad de definir variables en twig sin necesidad de pasarlas desde el controlador.


Y todavía hay un mundo por delante en lo que a twig respecta, pero a groso modo esto es sobre lo que vamos a tener que trabajar, más adelante veremos más temas sobre todo los formularios y su validación.