Dirígete a https://twig.symfony.com...
y haz clic para consultar su documentación.
Hay mucho material bueno aquí.
Pero lo que quiero que hagas es que te desplaces hasta la referencia a Twig.
¡Sí! Lo primero que debes mirar, a la izquierda, son estas cosas llamadas etiquetas.
Esta lista representa todas las cosas posibles que puedes utilizar con la sintaxis de hacer algo.
Sí, siempre será {% y luego una de estas cosas, como for o if.
Y sinceramente, sólo vas a utilizar unas 5 de ellas en el día a día.
Si quieres saber la sintaxis de alguna de ellas, sólo tienes que hacer clic para ver su documentación.
Además de las 20 etiquetas, Twig también tiene algo llamado filtros.
Estos son una maravilla.
Los filtros son básicamente funciones, pero con una sintaxis más moderna.
Twig también tiene funciones, pero son menos:
Twig prefiere los filtros: ¡son mucho más chulos!
Por ejemplo, hay un filtro llamado upper.
Usar un filtro es como usar la tecla | en la línea de comandos.
Tienes un valor y luego lo "canalizas" en el filtro que quieres, como upper.
¡Vamos a probar esto!
Imprime track.artist|upper.
Y ahora...
¡está en mayúsculas!
Si quieres confundir a tus compañeros de trabajo, puedes canalizarlo a lower...
que devuelve las cosas a las minúsculas.
No hay ninguna razón real para hacer esto, pero los filtros pueden encadenarse así.
De todos modos, echa un vistazo a la lista de filtros porque probablemente haya algo que te resulte útil.
Y... ¡eso es todo!
Además de las funciones, también hay algo llamado "pruebas", que son útiles en las sentencias if:
puedes decir cosas como "si el número es divisible por 5".
Vale, sólo una cosa más que aprender sobre Twig, y es genial.
Mira el código fuente HTML de la página.
Fíjate en que no hay estructura HTML: no hay etiquetas html, head o body.
Literalmente el HTML que tenemos dentro de nuestra plantilla, es lo que obtenemos.
Nada más.
Entonces, ¿hay...
algún tipo de sistema de maquetación en Twig en el que podamos añadir una maquetación base a nuestro alrededor?
Por supuesto.
Y es increíble.
Se llama herencia de plantillas.
Si tienes una plantilla y quieres que utilice algún diseño base, en la parte superior del archivo,
utiliza una etiqueta "hacer algo" llamada extends.
Pásale el nombre del archivo de diseño: base.html.twig.
Esto se refiere a esta plantilla de aquí.
Antes de comprobarlo, si lo intentamos ahora, ¡vaya!
Gran error: Una plantilla que extiende otra no puede incluir contenido fuera de los bloques Twig.
Para saber qué significa esto, abre base.html.twig.
Este es tu archivo de diseño base...
y eres totalmente libre de personalizarlo como quieras.
Ahora mismo...
se trata principalmente de aburridas etiquetas HTML...
excepto por una serie de "bloques".
Los bloques son básicamente "agujeros" en los que una plantilla hija puede colocar contenido.
Permíteme explicarlo de otra manera.
Cuando decimos extends 'base.html.twig', eso dice básicamente: ¡Twig!
Cuando renderices esta plantilla, quiero que realmente renderices base.html.twig...
y pongas mi contenido dentro de ella.
Twig entonces responde amablemente: Vale, genial...
Puedo hacerlo.
Pero ¿en qué lugar de base.html.twig quieres que ponga todo tu contenido?
¿Quieres que lo ponga al final de la página?
¿En la parte superior?
¿En algún lugar al azar en el medio?
La forma de decirle a Twig dónde poner nuestro contenido dentro de base.html.twig es anulando un bloque.
Observa que base.html.twig ya tiene un bloque llamado body...
y es justo donde queremos poner el HTML de nuestra plantilla.
Para ponerlo ahí, en nuestra plantilla, rodea todo el contenido con {% block body %}...
y luego {% endblock %}.
[[ code('01d2fbf6f5') ]] A esto se le llama herencia de la plantilla porque
estamos sobrescribiendo ese bloque body con
este nuevo contenido. Así que ahora, cuando Twig
renderice base.html.twig... y llegue a esta parte block body, va a imprimir el
HTMLblock body de nuestra plantilla
Watch: refresh y... el
error ha desaparecido. Y si ves el código fuente de la página, ¡tenemos una
página HTML completa! Ah, y los nombres de estos bloques
no son importantes. Si quieres cambiarles el nombre por el de tu personaje favorito de una sitcom de los 90
, hazlo. Sólo recuerda actualizar también su nombre en
cualquier plantilla hija. También puedes
añadir más bloques. Cada bloque que añadas es otro
punto de anulación potencial. Ah, y te habrás dado cuenta de que los bloques pueden
tener contenido por defecto. Mira la página ahora mismo: el
título dice "Bienvenido". Eso es porque el bloque title
tiene contenido por defecto... y
no lo estamos anulando. Vamos a cambiar el título por defecto
a "Vinilo mixto". Así que ahora ese será el título de todas las páginas
de nuestro sitio... a menos que
lo anulemos. En nuestra plantilla, ya sea encima del cuerpo del bloque o debajo -el orden de los bloques no
importa-, añade {% block title %}, {% endblock %} y, en medio, "Crear
un nuevo
disco". Y ahora... ¡sí! Esta página tiene
un título personalizado. Y puede que te preguntes ¿Qué pasa si no quiero sustituir
un bloque por completo.... sino que quiero añadirlo
a un bloque?
Eso es totalmente posible. En base.html.twig, el bloque title está configurado
como "Vinilo mixto". Si quisiéramos añadirle nuestro título personalizado
, podríamos decir "Crear un nuevo disco" y luego utilizar la
etiqueta "decir algo" para imprimir una
función llamada parent(). Eso hace exactamente lo que esperarías: encuentra el contenido de la plantilla padre
para este bloque
y
lo imprime. Actualiza y...
qué bien. Si alguna vez estás confundido sobre cómo funciona la herencia de plantillas, es útil, al menos para
mí, pensar en ella exactamente
como en la herencia orientada a objetos. Cada plantilla es como una clase y cada bloque es
como un método. Así, la "clase" de la página de inicio extiende
la "clase" de base.html.twig, pero anula dos
de sus métodos. Si eso sólo te ha confundido, no
te preocupes. Así que ... eso es
todo para Twig. Básicamente eres un experto en Twig, lo que me han dicho que es un tema popular
en las fiestas. A continuación: una de las características más destacadas de Symfony son
sus herramientas de depuración. Vamos a instalarlas y a comprobarlas.