WEBVTT

00:00:01.006 --> 00:00:05.236 align:middle
Dentro de nuestro JavaScript, estamos
haciendo una petición POST a la API.

00:00:05.616 --> 00:00:06.776 align:middle
Y tiene sentido.

00:00:07.116 --> 00:00:12.726 align:middle
El tema de "cual método HTTP"
- como GET, POST, PUT, etc -

00:00:13.146 --> 00:00:15.596 align:middle
se supone debes usar para un llamado a la API...

00:00:15.746 --> 00:00:17.216 align:middle
puede ser complicado.

00:00:17.646 --> 00:00:23.856 align:middle
Pero como nuestra ruta eventualmente va a cambiar
algo en la base de datos, como práctica recomendable,

00:00:24.116 --> 00:00:27.896 align:middle
no queremos permitir a la gente que hagan llamados
tipo GET a nuestra ruta.

00:00:28.466 --> 00:00:32.626 align:middle
Por ahora, podemos hacer un llamado GET con
tan solo poner la URL en nuestro navegador.

00:00:32.946 --> 00:00:34.496 align:middle
Hey! Acabo de votar!

00:00:35.546 --> 00:00:40.596 align:middle
Para mejorar esto, en el CommentController,
podemos hacer más inteligente a nuestra ruta,

00:00:40.986 --> 00:00:44.946 align:middle
podemos hacer que solo funcione cuando
el método sea POST.

00:00:45.516 --> 00:00:48.506 align:middle
Para lograrlo agrega methods="POST".

00:00:49.836 --> 00:00:52.336 align:middle
Tan pronto lo hagamos, al refrescar...

00:00:52.376 --> 00:00:54.656 align:middle
error 404!

00:00:55.046 --> 00:00:57.276 align:middle
La ruta ya no se encuentra

00:00:57.956 --> 00:01:00.436 align:middle
Otra buena forma de ver esto es en tu terminal.

00:01:00.846 --> 00:01:05.176 align:middle
Corre: php bin/console router:match.

00:01:05.716 --> 00:01:07.276 align:middle
Luego copia la URL...

00:01:11.686 --> 00:01:12.466 align:middle
y pegala.

00:01:13.246 --> 00:01:17.386 align:middle
Este divertido comando nos dice cual ruta
le pertenece a una URL.

00:01:17.826 --> 00:01:21.466 align:middle
En este caso, ninguna ruta fue encontrada pero
esto nos dice

00:01:21.466 --> 00:01:26.196 align:middle
que casi encuentra la ruta
app_comment_commentvote.

00:01:26.746 --> 00:01:33.226 align:middle
Para ver si un llamado POST sería encontrado,
pasa -- method=POST: Y...

00:01:33.306 --> 00:01:39.296 align:middle
Bum! Nos muestra la ruta que pudo encontrar y
todos los detalles, incluyendo el controlador.

00:01:39.916 --> 00:01:42.746 align:middle
Pero hay algo más que no está del todo bien
con nuestra ruta.

00:01:42.746 --> 00:01:48.676 align:middle
La ruta espera que la parte {direction}
sea arriba o abajo.

00:01:49.116 --> 00:01:53.426 align:middle
Pero... técnicamente, alguien podría
poner plátano en la URL.

00:01:53.426 --> 00:01:59.996 align:middle
De hecho, probémoslo: Cambia la dirección
por plátano: Si!

00:02:00.336 --> 00:02:02.566 align:middle
Votamos "plátano" para este comentario!

00:02:03.276 --> 00:02:04.996 align:middle
No es el fin del mundo...

00:02:05.516 --> 00:02:11.526 align:middle
si un usuario intenta hackear nuestro sistema
y hace esto, solo significaría un voto negativo.

00:02:11.526 --> 00:02:13.156 align:middle
Pero podemos hacerlo mejor.

00:02:13.696 --> 00:02:17.856 align:middle
Como has de saber, normalmente un comodín
se empareja con cualquier cosa.

00:02:18.446 --> 00:02:23.456 align:middle
Sin embargo, si quisieras, puedes controlarlo
con una expresión regular.

00:02:24.146 --> 00:02:28.696 align:middle
Dentro de {}, pero después del nombre, agrega &lt;&gt;.

00:02:29.016 --> 00:02:33.966 align:middle
Dentro, escribe up|down.

00:02:36.306 --> 00:02:39.686 align:middle
Ahora prueba el comando router:match - Si!

00:02:39.966 --> 00:02:43.696 align:middle
No encuentra la ruta porque plátano no
es arriba o abajo.

00:02:44.236 --> 00:02:49.906 align:middle
Si cambiamos esto por arriba, funciona:
Por cierto, podrías ser tentado

00:02:49.906 --> 00:02:53.766 align:middle
a hacer más inteligente el comodín {id}.

00:02:54.366 --> 00:03:01.416 align:middle
Asumiendo que usamos ids con auto incremento en la
base de datos, sabemos que el id debe de ser un entero.

00:03:02.086 --> 00:03:10.396 align:middle
Para hacer que esta ruta solo funcione si la
parte del id es un número, puedes agregar &lt;\d+&gt;,

00:03:10.786 --> 00:03:15.476 align:middle
lo que significa: encuentra un "dígito" con
cualquier tamaño.

00:03:15.476 --> 00:03:18.736 align:middle
Pero... En realidad no voy a poner esto aquí.

00:03:19.246 --> 00:03:24.606 align:middle
Por qué? Eventualmente vamos a usar $id
para llamar a la base de datos.

00:03:25.246 --> 00:03:27.956 align:middle
Si alguien escribe plátano aquí, a quien le importa?

00:03:28.346 --> 00:03:31.926 align:middle
El query no va a encontrar ningún comentario
con plátano como id

00:03:31.926 --> 00:03:35.286 align:middle
y vamos a agregar algo de código para retornar
una página 404.

00:03:35.906 --> 00:03:41.946 align:middle
Incluso si alguien intenta hacer un ataque de inyección de SQL,
como aprenderás más tarde en nuestro tutorial de base de datos,

00:03:42.316 --> 00:03:46.836 align:middle
no habría problema, porque la capa de la
base de datos nos protege de ello.

00:03:47.426 --> 00:03:49.276 align:middle
Hay que asegurarnos que todo aún funciona.

00:03:49.906 --> 00:03:53.036 align:middle
Voy a cerrar una pestaña del navegador
y refrescar la página.

00:03:54.176 --> 00:03:56.276 align:middle
Eso! los votos aún se ven bien.

00:03:57.026 --> 00:04:03.696 align:middle
A continuación, demos un vistazo a la parte más
fundamental de Symfony: Los servicios.
