WEBVTT

00:00:01.036 --> 00:00:05.266 align:middle
Es muy sencillo crear una ruta en YAML que apunte
a una función del controlador.

00:00:05.596 --> 00:00:08.646 align:middle
Pero hay una forma aun más simple de
crear rutas...

00:00:08.846 --> 00:00:10.666 align:middle
y me encanta.

00:00:10.996 --> 00:00:12.666 align:middle
Se llama: anotaciones.

00:00:12.666 --> 00:00:16.376 align:middle
Primero, comenta la ruta en YAML.

00:00:16.816 --> 00:00:18.736 align:middle
Básicamente, borrala.

00:00:19.386 --> 00:00:21.686 align:middle
Para comprobar que no funciona, refresca la
homepage.

00:00:22.126 --> 00:00:24.166 align:middle
Asi es! Regresó a la página de bienvenida.

00:00:24.866 --> 00:00:27.476 align:middle
Las anotaciones son un formato especial
de configuración

00:00:27.976 --> 00:00:34.156 align:middle
y el soporte a anotaciones no es un standard
en nuestra pequeña aplicación de Symfony.

00:00:34.576 --> 00:00:36.276 align:middle
Y... eso está bien!

00:00:36.656 --> 00:00:43.486 align:middle
De hecho, esa es toda la filosofía de Symfony: empieza
pequeño y agrega funcionalidades cuando las necesites.

00:00:43.556 --> 00:00:48.436 align:middle
Para agregar soporte a anotaciones, vamos a
utilizar Composer para requerir una nueva librería.

00:00:48.806 --> 00:00:52.386 align:middle
Si aun no tienes Composer instalado,
ve a https://getcomposer.org.

00:00:52.856 --> 00:00:58.756 align:middle
Una vez que lo instales, corre: composer require
annotations Si estás familiarizado con Composer,

00:00:58.956 --> 00:01:02.136 align:middle
el nombre de la librería se te ha de hacer extraño.

00:01:02.696 --> 00:01:09.886 align:middle
Y en realidad, instaló una librería totalmente
diferente: sensio/framework-extra-bundle.

00:01:10.766 --> 00:01:15.396 align:middle
Casi al final del comando, menciona
algo sobre dos recetas.

00:01:15.876 --> 00:01:21.186 align:middle
Hablaremos sobre ello próximamente:
es parte de lo que hace especial a Symfony.

00:01:22.336 --> 00:01:25.776 align:middle
En fin, ya que el soporte a anotaciones
está instalado,

00:01:25.966 --> 00:01:29.316 align:middle
podemos agregar de vuelta nuestra ruta
usando anotaciones.

00:01:29.816 --> 00:01:31.096 align:middle
Que significa eso?

00:01:31.706 --> 00:01:39.056 align:middle
Arriba de la función del controlador, escribe
/** y presiona enter para crear una sección PHPDoc

00:01:39.566 --> 00:01:44.496 align:middle
Luego escribe @Route y autocompleta la
del componente Routing.

00:01:45.696 --> 00:01:51.076 align:middle
Tal como la otra vez, PhpStorm agregó automáticamente
el use statement en la parte de arriba de la clase.

00:01:52.056 --> 00:01:53.676 align:middle
Dentro de los paréntesis, escribe "/".

00:01:53.866 --> 00:01:54.506 align:middle
Eso es todo!

00:01:54.506 --> 00:02:03.496 align:middle
Cuando el usuario vaya a la homepage, se va a
ejecutar la función abajo de esto.

00:02:04.256 --> 00:02:08.866 align:middle
Me encantan las anotaciones porque son simples
de leer y mantienen la ruta

00:02:08.866 --> 00:02:11.306 align:middle
y controlador uno junto del otro.

00:02:12.276 --> 00:02:13.146 align:middle
Y si...

00:02:13.366 --> 00:02:18.476 align:middle
las anotaciones son literalmente configuración
dentro de comentarios de PHP.

00:02:18.666 --> 00:02:25.126 align:middle
Si no te gustan, siempre puedes utilizar
YAML o XML: Symfony es super flexible.

00:02:25.676 --> 00:02:28.996 align:middle
Desde el punto de vista del rendimiento,
todos los formatos son lo mismo.

00:02:29.946 --> 00:02:31.556 align:middle
Ahora cuando refrescamos la homepage...

00:02:31.806 --> 00:02:33.026 align:middle
estamos de vuelta!

00:02:34.006 --> 00:02:38.006 align:middle
Esta página eventualmente va a listar
algunas preguntas recientes.

00:02:38.516 --> 00:02:42.806 align:middle
Cuando le das click a una pregunta en específico,
necesitará su propia página.

00:02:43.706 --> 00:02:45.686 align:middle
Vamos a crear una segunda ruta y
controlador para ello.

00:02:46.066 --> 00:02:48.396 align:middle
Como? creando un segundo metodo.

00:02:48.926 --> 00:02:51.126 align:middle
Que tal: public function show().

00:02:53.816 --> 00:03:00.256 align:middle
Arriba de esto, agrega @Route() y asigna
la URL a, que te parece,

00:03:00.526 --> 00:03:04.796 align:middle
/questions/how-to-tie-my-shoes-with-magic.

00:03:05.246 --> 00:03:06.206 align:middle
Eso seria grandioso!

00:03:07.256 --> 00:03:13.516 align:middle
Adentro, justo como la última vez, retorna
una nueva respuesta: la de HttpFoundation.

00:03:14.936 --> 00:03:19.346 align:middle
La página futura para mostrar preguntas
Vamos a probarla!

00:03:19.696 --> 00:03:24.296 align:middle
Copia la URL, ve a tu navegador,
pega y...

00:03:24.716 --> 00:03:28.416 align:middle
funciona! Acabamos de crear una segunda página...

00:03:28.656 --> 00:03:29.656 align:middle
en menos de un minuto.

00:03:30.736 --> 00:03:35.686 align:middle
Por cierto, no importa a cual URL
vayamos - como esta o la homepage -

00:03:35.966 --> 00:03:41.336 align:middle
el archivo PHP que nuestro servidor web
ejecuta es index.php.

00:03:41.336 --> 00:03:48.736 align:middle
Es como si fuéramos a /index.php/questions
/how-to-tie-my-shoes-with-magic.

00:03:49.276 --> 00:03:54.646 align:middle
La única razón por la que no necesitas
escribir index.php en la URL es

00:03:54.646 --> 00:04:00.546 align:middle
porque nuestro servidor web local está configurado
para ejecutar index.php automáticamente.

00:04:01.166 --> 00:04:04.946 align:middle
En producción, tu configuración de
Nginx o Apache debe de hacer lo mismo.

00:04:05.536 --> 00:04:07.376 align:middle
Revisa la documentación de Symfony para
aprender como hacerlo.

00:04:08.316 --> 00:04:12.106 align:middle
Eventualmente, vamos a tener una
base de datos llena de preguntas.

00:04:12.296 --> 00:04:18.426 align:middle
Y entonces, no, no vamos a crear manualmente
una ruta por cada pregunta.

00:04:18.986 --> 00:04:21.786 align:middle
En su lugar, podemos hacer más inteligente
esta ruta.

00:04:22.336 --> 00:04:27.136 align:middle
Reemplaza la parte how-to-tie-my-shoes-with-magic
por {slug}.

00:04:27.496 --> 00:04:35.666 align:middle
Cuando pones algo entre llaves dentro de una ruta,
se convierte en comodín.

00:04:36.446 --> 00:04:40.316 align:middle
Esta ruta ahora aplica a /questions/LO-QUE-SEA.

00:04:41.006 --> 00:04:44.936 align:middle
El nombre {slug} no es importante:
pudimos haber puesto lo que sea...

00:04:45.236 --> 00:04:47.416 align:middle
por ejemplo {slugulusErectus}!

00:04:48.326 --> 00:04:49.786 align:middle
No hace ninguna diferencia.

00:04:50.326 --> 00:04:58.186 align:middle
Pero, como sea que llamemos a este comodín -
ejemplo {slug} - ahora nos permite tener un argumento

00:04:58.186 --> 00:05:02.076 align:middle
en nuestro controlador con el mismo
nombre: $slug...

00:05:03.346 --> 00:05:06.866 align:middle
el cual será asignado con el valor
de esa parte de la URL.

00:05:07.946 --> 00:05:09.986 align:middle
Utilicemoslo para hacer mas elegante
a nuestra página!

00:05:10.266 --> 00:05:18.986 align:middle
Usemos sprintf(), escribe "la pregunta"
y agrega %s como comodín.

00:05:21.076 --> 00:05:23.026 align:middle
Pasa $slug como comodín.

00:05:23.926 --> 00:05:27.036 align:middle
Bien! Cambia al navegador, refresca y...

00:05:27.296 --> 00:05:37.956 align:middle
me encanta! Cambia la URL a /questions
/accidentally-turned-cat-into-furry-shoes y...

00:05:37.956 --> 00:05:38.706 align:middle
eso también funciona!

00:05:38.706 --> 00:05:43.916 align:middle
En el futuro, vamos a utilizar el $slug
para extraer la pregunta de la base de datos.

00:05:44.276 --> 00:05:48.236 align:middle
Pero como aun no llegamos ahí,
usaré str_replace() ...

00:05:51.226 --> 00:05:56.836 align:middle
y ucwords() solo para hacerlo un poco
mas elegante.

00:05:57.306 --> 00:06:00.386 align:middle
Aun es pronto, pero la página ya
comienza a estar viva!

00:06:01.376 --> 00:06:04.416 align:middle
A continuación, nuestra aplicación esconde
un secreto!

00:06:04.696 --> 00:06:08.786 align:middle
Una pequeña línea de comandos ejecutable
que está llena de beneficios.
