<?php
namespace App\EventListener;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
/**
* Este evento se envía tan pronto como ocurre un error durante el manejo de la solicitud HTTP.
*/
class ExceptionListener
{
public function onKernelException(ExceptionEvent $event)
{
// Obtienes el objeto de excepción del evento recibido
$exception = $event->getThrowable();
// Personalice su objeto de respuesta para mostrar los detalles de la excepción
$response = new JsonResponse(['status' => false, 'msg' => [$exception->getMessage()]]);
// HttpExceptionInterface es un tipo especial de excepción que contiene el código de estado y los detalles del encabezado
if ($exception instanceof HttpExceptionInterface) {
$response->setStatusCode($exception->getStatusCode());
$response->headers->replace($exception->getHeaders());
} else {
$response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
}
$response->headers->set('Content-Type', 'application/json');
// envía el objeto de respuesta modificado al evento
$event->setResponse($response);
}
}