src/Subscriber/ExceptionSubscriber.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Subscriber;
  4. use Monolog\Logger;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\HttpKernel\KernelInterface;
  12. final class ExceptionSubscriber implements EventSubscriberInterface
  13. {
  14.     public function __construct(private KernelInterface $kernel, private LoggerInterface $mainLogger)
  15.     {
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             KernelEvents::EXCEPTION => [
  21.                 ['processException'0],
  22.             ],
  23.         ];
  24.     }
  25.     public function processException(ExceptionEvent $exceptionEvent): void
  26.     {
  27.         if ('local' === $this->kernel->getEnvironment()) {
  28.             return;
  29.         }
  30.         $throwable $exceptionEvent->getThrowable();
  31.         $statusCodeDefault = ($throwable->getCode() >= 400) && ($throwable->getCode() < 600) ? $throwable->getCode() : Response::HTTP_BAD_REQUEST;
  32.         $exceptionEvent->setResponse(new JsonResponse([
  33.             'message' => $throwable->getMessage(),
  34.         ], $statusCodeDefault));
  35.         $this->mainLogger->log(Logger::ERROR$throwable->getMessage());
  36.     }
  37. }