src/Listener/ExceptionApiListener.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use Symfony\Component\HttpFoundation\JsonResponse;
  4. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  5. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  6. final class ExceptionApiListener {
  7.     public function onKernelException(ExceptionEvent $event)
  8.     {
  9.         $exception $event->getThrowable();
  10.         $response = new JsonResponse();
  11.         $message sprintf(
  12.             'Exception: %s with code %s at %s:%s',
  13.             $exception->getMessage(),
  14.             $exception->getCode(),
  15.             $exception->getFile(),
  16.             $exception->getLine()
  17.         );
  18.         $data = [
  19.             'error' => true,
  20.             'message' => $message,
  21.         ];
  22.         if ($exception instanceof HttpExceptionInterface) {
  23.             $response->setStatusCode($exception->getStatusCode());
  24.             $response->headers->replace($exception->getHeaders());
  25.         } else {
  26.             $response->setStatusCode(JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
  27.         }
  28.         $response->setData($data);
  29.         $request $event->getRequest();
  30.         if (strpos($request->getPathInfo(), '/api') === 0) {
  31.             $event->setResponse($response);
  32.         }
  33.     }
  34. }