<?php
namespace App\EventSubscriber;
use App\Utils\APIResponse;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
class EventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return array(
ExceptionEvent::class => 'onKernelException',
);
}
public function onKernelException(ExceptionEvent $event)
{
if (preg_match('/^\/api\//', $event->getRequest()->getRequestUri())) {
$exception = $event->getThrowable();
$statusCode = $exception instanceof HttpExceptionInterface ? $exception->getStatusCode() : APIResponse::$CLIENT_ERROR;
$response = new APIResponse();
$response->setStatus($statusCode);
$response->setContent($exception->getMessage());
$event->setResponse(new JsonResponse($response, $statusCode));
}
}
}