Loading...

Modificar Request antes de que llegue al controlador en Symfony

2023-02-07
  • php
  • symfony
  • request

Como programadores, es esencial entender cómo funcionan las requests y las responses en una API REST. Comprender esto nos abrirá la puerta a poder modificar esos paquetes de datos.

En este artículo, vamos a ver cómo modificar la petición a una API antes de que llegue a ser procesada, y para ello vamos a utilizar Symfony.

Crearemos un EventListener que nos permitirá realizar diversas acciones, como añadir cabeceras personalizados o verificar la IP del cliente por ejemplo.

Sigue leyendo y aprende a darle un toque personalizado a tus peticiones.

La importancia de modificar una petición en Symfony

Cuando trabajamos con una API REST desarrollada con Symfony, a menudo nos encontramos con la necesidad de ajustar y personalizar las peticiones antes de que sean gestionadas por el controlador.

Esto nos brinda la oportunidad de realizar tareas adicionales, como agregar información adicional, registrar datos en el log o realizar comprobaciones de seguridad. Entre otras…

Crear un EventListener

Para modificar una petición antes de que llegue al controlador, necesitamos crear una clase que actúe como EventListener.

En nuestro ejemplo, utilizaremos una clase llamada RequestListener.

Veamos un fragmento de código que muestra cómo capturar la petición antes de que llegue al controlador y escribir información en el log relacionada con la request.

Snap.png

En este código, creamos la clase RequestListener con un constructor que recibe el kernel y el servicio de log (LoggerService). Luego, implementamos el método onKernelRequest que captura la petición, realiza comprobaciones necesarias y registra información relevante en el log a través de su servicio.

Configurar el EventListener

Para asegurarnos de que nuestra clase RequestListener intercepte todas las peticiones y realice las acciones correspondientes, debemos realizar algunas modificaciones en el archivo services.yaml. Hay que añadir las siguientes líneas:

Snap (1).png

En la definición de los tags le estamos diciendo que esta clase es un event listener que va a escuchar todos los eventos de tipo kernel.request y que tiene que ejecutar el método onKernelRequest que tiene que estar definido en nuestra clase.

La parte de bind hace referencia a que estamos inyectando la variable de entorno a la clase.

Y eso es todo, no hay mas… ¡Hasta otra!