src/EventSubscriber/BadRequestResponseEventSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use JetBrains\PhpStorm\ArrayShape;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use Twig\Environment;
  12. class BadRequestResponseEventSubscriber implements EventSubscriberInterface
  13. {
  14.     private Environment $twig;
  15.     private LoggerInterface $logger;
  16.     public function __construct(Environment $twigLoggerInterface $logger)
  17.     {
  18.         $this->twig $twig;
  19.         $this->logger $logger;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             ExceptionEvent::class => 'onException'
  25.         ];
  26.     }
  27.     public function onException(ExceptionEvent $event): void
  28.     {
  29.         if (($exception $event->getThrowable()) instanceof BadRequestHttpException) {
  30.             $this->logger->warning(sprintf('Message: %s'$exception->getMessage()));
  31.             $event->setResponse($this->getResponse($exception));
  32.         }
  33.     }
  34.     private function getResponse(BadRequestHttpException $exception): Response
  35.     {
  36.         return new Response(
  37.             $this->twig->render(
  38.                 'page/error/400.html.twig',
  39.                 ['message' => $exception->getMessage()]
  40.             ),
  41.             Response::HTTP_BAD_REQUEST
  42.         );
  43.     }
  44. }