WEBVTT

00:00:01.066 --> 00:00:07.326 align:middle
Symfony es un conjunto de librerías que nos proporciona
toneladas de herramientas: herramientas para registrar,

00:00:07.586 --> 00:00:11.336 align:middle
hacer consultas a la base de datos, enviar
correos electrónicos, renderizar plantillas

00:00:11.336 --> 00:00:14.506 align:middle
y hacer llamadas a la API,
sólo por nombrar algunas.

00:00:15.256 --> 00:00:22.436 align:middle
Si las cuentas, como hice yo, Symfony
consta de unas 100 bibliotecas distintas.

00:00:22.706 --> 00:00:28.676 align:middle
¡Vaya! Ahora mismo, quiero empezar a convertir
nuestras páginas en verdaderas páginas HTML...

00:00:28.906 --> 00:00:30.786 align:middle
en lugar de devolver sólo texto.

00:00:31.176 --> 00:00:36.216 align:middle
Pero no vamos a meter un montón
de HTML en nuestras clases de PHP.

00:00:36.526 --> 00:00:40.216 align:middle
Qué asco. En su lugar, vamos
a renderizar una plantilla.

00:00:40.736 --> 00:00:41.396 align:middle
Pero, ¿adivina qué?

00:00:41.676 --> 00:00:45.106 align:middle
¡No hay ninguna biblioteca de
plantillas en nuestro proyecto!

00:00:45.806 --> 00:00:50.466 align:middle
¿Qué? Pero yo creía que acababas de decir que Symfony
tiene una herramienta para renderizar plantillas!?

00:00:50.706 --> 00:00:52.876 align:middle
¡Mentira! Bueno...

00:00:52.876 --> 00:00:54.836 align:middle
Symfony sí tiene una herramienta para eso.

00:00:55.256 --> 00:01:00.046 align:middle
Pero nuestra aplicación utiliza actualmente
muy pocas de las bibliotecas de Symfony.

00:01:00.786 --> 00:01:07.076 align:middle
Las herramientas que tenemos hasta ahora no suponen
mucho más que un sistema de ruta-controlador-respuesta.

00:01:07.976 --> 00:01:11.106 align:middle
Si necesitas renderizar una plantilla o
hacer una consulta a la base de datos,

00:01:11.326 --> 00:01:14.906 align:middle
no tenemos esas herramientas
instaladas en nuestra app...

00:01:15.306 --> 00:01:18.566 align:middle
todavía. De hecho, me encanta esto de Symfony.

00:01:19.206 --> 00:01:26.306 align:middle
En lugar de empezar con un proyecto gigantesco, con
todo lo que necesitamos, más toneladas de cosas

00:01:26.306 --> 00:01:29.366 align:middle
que no necesitamos, Symfony
empieza de forma diminuta.

00:01:29.766 --> 00:01:33.026 align:middle
Luego, si necesitas algo, lo instalas

00:01:33.876 --> 00:01:37.616 align:middle
Pero antes de instalar una biblioteca
de plantillas, en tu terminal, ejecuta

00:01:37.616 --> 00:01:41.356 align:middle
git status Vamos a confirmar todo: git add .

00:01:41.356 --> 00:01:43.016 align:middle
Puedo ejecutar con seguridad git add .

00:01:43.586 --> 00:01:47.416 align:middle
-que añade todo lo que hay en mi
directorio a git- porque uno de los archivos

00:01:47.416 --> 00:01:53.756 align:middle
con los que venía nuestro proyecto originalmente
era un archivo .gitignore, que ya ignora cosas

00:01:53.756 --> 00:01:57.906 align:middle
como el directorio vendor/, el
directorio var/ y varias otras rutas.

00:01:58.966 --> 00:02:02.196 align:middle
Si te preguntas qué son estas
cosas raras de los marcadores, está

00:02:02.376 --> 00:02:06.826 align:middle
relacionado con el sistema de
recetas, del que vamos a hablar.

00:02:07.926 --> 00:02:13.046 align:middle
En cualquier caso, ejecuta git commit
y añade un mensaje: ¡Perfecto!

00:02:13.266 --> 00:02:15.526 align:middle
Y ahora, estamos limpios.

00:02:16.546 --> 00:02:20.786 align:middle
Bien, ¿cómo podemos instalar
una biblioteca de plantillas?

00:02:21.126 --> 00:02:24.976 align:middle
¿Y qué bibliotecas de plantillas
están disponibles para Symfony?

00:02:25.236 --> 00:02:26.916 align:middle
¿Y cuál es la recomendada?

00:02:27.476 --> 00:02:32.156 align:middle
Bueno, por supuesto, una buena manera de
responder a estas preguntas sería consultar la

00:02:32.156 --> 00:02:33.656 align:middle
documentación de Symfony.

00:02:34.176 --> 00:02:35.716 align:middle
Pero también podemos simplemente...

00:02:35.886 --> 00:02:42.546 align:middle
¡adivinar! En cualquier proyecto PHP, puedes añadir
nuevas bibliotecas de terceros a tu aplicación diciendo

00:02:42.546 --> 00:02:45.706 align:middle
"composer require" y luego
el nombre del paquete.

00:02:46.716 --> 00:02:54.726 align:middle
Todavía no sabemos el nombre del paquete que necesitamos,
así que lo adivinaré: composer require templates Ahora bien,

00:02:54.726 --> 00:02:59.916 align:middle
si ya has utilizado Compos er , puede que
ahora mismo estés gritando a tu pantalla

00:03:00.446 --> 00:03:06.946 align:middle
¿Por qué? Porque en Composer, los nombres de
los paquetes son siempre something/something.

00:03:06.946 --> 00:03:12.356 align:middle
No es posible, literalmente, tener un
paquete que sólo se llame templates.

00:03:12.696 --> 00:03:17.236 align:middle
Pero mira: cuando ejecutamos esto, ¡funciona!

00:03:17.586 --> 00:03:23.436 align:middle
Y arriba dice que está usando la
versión 1 de symfony/twig-pack.

00:03:24.146 --> 00:03:26.996 align:middle
Twig es el nombre del motor
de plantillas de Symfony.

00:03:27.956 --> 00:03:31.336 align:middle
Para entender esto, vamos a
dar un pequeño paso atrás.

00:03:31.856 --> 00:03:37.776 align:middle
Nuestro proyecto comenzó con un archivo composer.json
que contiene varias bibliotecas de Symfony.

00:03:38.486 --> 00:03:41.766 align:middle
Una de ellas se llama symfony/flex.

00:03:42.336 --> 00:03:44.766 align:middle
Flex es un plugin de Composer.

00:03:45.076 --> 00:03:48.056 align:middle
Así que añade más funciones a Composer.

00:03:48.746 --> 00:03:52.076 align:middle
En realidad, añade tres
superpoderes a Composer.

00:03:52.746 --> 00:03:56.996 align:middle
El primero, que acabamos de
ver, se llama aliases de Flex.

00:03:56.996 --> 00:04:02.966 align:middle
Dirígete a https://flex.symfony.com para
ver una página gigante llena de paquetes.

00:04:04.826 --> 00:04:06.206 align:middle
Busca "plantillas".

00:04:07.546 --> 00:04:08.126 align:middle
Aquí está.

00:04:08.276 --> 00:04:15.116 align:middle
En symfony/twig-pack, dice Aliases:
template, templates, twig y twig-pack.

00:04:15.956 --> 00:04:19.696 align:middle
La idea que hay detrás de los
alias de Flex es muy sencilla.

00:04:20.106 --> 00:04:22.696 align:middle
Escribimos composer require templates.

00:04:23.086 --> 00:04:29.716 align:middle
Y luego, internamente, Flex lo
cambia por symfony/twig-pack.

00:04:30.556 --> 00:04:34.386 align:middle
En última instancia, ése es
el paquete que Composer instala.

00:04:35.076 --> 00:04:40.526 align:middle
Esto significa que, la mayoría de las veces, puedes
simplemente "composer require" lo que quieras,

00:04:40.886 --> 00:04:48.036 align:middle
como composer require logger, composer require
orm, composer require icecream, lo que sea.

00:04:48.316 --> 00:04:50.246 align:middle
Es sólo un sistema de acceso directo.

00:04:50.936 --> 00:04:57.556 align:middle
Lo importante es que, lo que realmente
se instaló fue symfony/twig-pack.

00:04:57.976 --> 00:05:01.666 align:middle
Y eso significa que, en
nuestro archivo composer.json,

00:05:01.976 --> 00:05:07.196 align:middle
deberíamos ver ahora symfony/twig-pack
bajo la clave require.

00:05:08.036 --> 00:05:10.886 align:middle
Pero si te das la vuelta, ¡no está ahí!

00:05:11.236 --> 00:05:19.316 align:middle
¡No hay nada que hacer! En su lugar, ha añadido
symfony/twig-bundle, twig/extra-bundle, y twig/twig.

00:05:20.196 --> 00:05:26.166 align:middle
Estamos asistiendo al segundo superpoder
de Symfony Flex: desempaquetar paquetes.

00:05:27.106 --> 00:05:29.426 align:middle
Copiamos el nombre del paquete original y...

00:05:29.976 --> 00:05:33.316 align:middle
podemos encontrar ese
repositorio en GitHub entrando

00:05:33.316 --> 00:05:38.626 align:middle
en https://github.com/symfony/twig-pack.

00:05:38.626 --> 00:05:43.966 align:middle
Y... sólo contiene un archivo: composer.json.

00:05:45.236 --> 00:05:51.366 align:middle
Y esto requiere otros tres paquetes: los tres
que acabamos de ver añadidos a nuestro proyecto.

00:05:52.196 --> 00:05:54.706 align:middle
Esto se llama paquete Symfony.

00:05:55.186 --> 00:06:00.636 align:middle
Es... realmente un paquete falso que nos
ayuda a instalar otros paquetes. Resulta

00:06:01.316 --> 00:06:05.906 align:middle
que, si quieres añadir un motor de
plantillas rico a tu aplicación, es

00:06:06.256 --> 00:06:09.426 align:middle
recomendable instalar estos tres paquetes.

00:06:09.706 --> 00:06:12.286 align:middle
Pero en lugar de hacer que
los añadas manualmente,

00:06:12.556 --> 00:06:17.356 align:middle
puedes hacer que Composer requiera
symfony/twig-pack y los obtenga automáticamente.

00:06:18.236 --> 00:06:23.626 align:middle
Cuando instalas un "paquete", como éste,
Flex lo "desempaqueta" automáticamente:

00:06:24.366 --> 00:06:28.176 align:middle
encuentra los tres paquetes
de los que depende el paquete

00:06:28.316 --> 00:06:31.936 align:middle
y los añade a tu archivo composer.json.

00:06:32.556 --> 00:06:37.966 align:middle
Así pues, los paquetes son un atajo para que
puedas ejecutar un comando composer require

00:06:38.296 --> 00:06:41.656 align:middle
y conseguir que se añadan
varias bibliotecas a tu proyecto.

00:06:42.656 --> 00:06:46.746 align:middle
Bien, ¿cuál es el tercer y
último superpoder de Flex?

00:06:47.056 --> 00:06:48.286 align:middle
Me alegro de que lo preguntes

00:06:49.026 --> 00:06:54.006 align:middle
Para averiguarlo, en tu terminal,
ejecuta git status Whoa.

00:06:54.596 --> 00:07:00.096 align:middle
Normalmente, cuando ejecutas composer require,
los únicos archivos que debería modificar

00:07:00.276 --> 00:07:07.126 align:middle
-además de descargar paquetes en vendor/
- son composer.json y composer.lock.

00:07:07.916 --> 00:07:11.836 align:middle
El tercer superpoder de Flex
es su sistema de recetas.

00:07:12.506 --> 00:07:17.126 align:middle
Siempre que instales un paquete,
ese paquete puede tener una receta.

00:07:17.596 --> 00:07:22.606 align:middle
Si la tiene, además de descargar
el paquete en el directorio vendor/,

00:07:22.776 --> 00:07:25.656 align:middle
Flex también ejecutará su receta.

00:07:26.346 --> 00:07:32.526 align:middle
Las recetas pueden hacer cosas como añadir nuevos
archivos o incluso modificar algunos archivos existentes.

00:07:33.036 --> 00:07:39.786 align:middle
Observa: si nos desplazamos un poco hacia
arriba, ah sí: dice "configurando 2 recetas".

00:07:40.276 --> 00:07:44.356 align:middle
Así que aparentemente había una
receta para symfony/twig-bundle

00:07:44.576 --> 00:07:47.216 align:middle
y también una receta para twig/extra-bundle.

00:07:47.516 --> 00:07:52.846 align:middle
Y estas recetas aparentemente
actualizaron el archivo config/bundles.php

00:07:53.006 --> 00:07:55.196 align:middle
y añadieron un nuevo directorio y archivo.

00:07:56.366 --> 00:07:59.046 align:middle
El sistema de recetas es muy bueno.

00:07:59.436 --> 00:08:03.286 align:middle
Todo lo que tenemos que hacer es que
Composer requiera una nueva biblioteca

00:08:03.896 --> 00:08:09.556 align:middle
y su receta añadirá todos los archivos de
configuración u otra configuración necesaria para

00:08:09.696 --> 00:08:13.556 align:middle
que podamos empezar a usar
esa biblioteca inmediatamente

00:08:14.006 --> 00:08:18.326 align:middle
Se acabó el seguir 5 pasos de
"instalación" manual en un README.

00:08:19.036 --> 00:08:22.326 align:middle
Cuando añades una biblioteca,
funciona de forma inmediata.

00:08:23.466 --> 00:08:26.676 align:middle
A continuación: Quiero profundizar
un poco más en las recetas.

00:08:27.146 --> 00:08:28.606 align:middle
Por ejemplo, ¿dónde viven?

00:08:29.026 --> 00:08:30.466 align:middle
¿Cuál es su color favorito?

00:08:30.656 --> 00:08:34.836 align:middle
¿Y qué ha añadido esta receta específicamente
a nuestra aplicación y por qué?

00:08:34.836 --> 00:08:40.416 align:middle
También voy a contarte un pequeño secreto:
todos los archivos de nuestro proyecto

00:08:40.706 --> 00:08:43.616 align:middle
-todos los archivos de config/,
el directorio public/...

00:08:43.996 --> 00:08:47.286 align:middle
todo este material - fue
añadido a través de una receta.

00:08:47.776 --> 00:08:48.636 align:middle
Y lo demostraré
