src/EventListener/AdminExceptionListener.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener;
  4. use App\Helper\StringHelper;
  5. use Psr\Log\LoggerInterface;
  6. use Psr\Log\LogLevel;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. use Twig\Environment;
  11. class AdminExceptionListener
  12. {
  13.     private Environment $twig;
  14.     private TranslatorInterface $translator;
  15.     private LoggerInterface $logger;
  16.     public function __construct(Environment $twigTranslatorInterface $translatorLoggerInterface $adminLogger)
  17.     {
  18.         $this->twig $twig;
  19.         $this->translator $translator;
  20.         $this->logger $adminLogger;
  21.     }
  22.     public function onKernelException(ExceptionEvent $event): void
  23.     {
  24.         if($_ENV['APP_ENV'] == 'dev')
  25.             return;
  26.         $this->logger->log(LogLevel::ERROR$event->getException()->getMessage());
  27.         $url $event->getRequest()->getPathInfo();
  28.         if (!StringHelper::startsWith($url'/admin')) {
  29.             return;
  30.         }
  31.         $code $event->getException()->getCode() === Response::HTTP_INTERNAL_SERVER_ERROR $event->getException()->getCode();
  32.         $event->setResponse((new Response())->setContent($this->twig->render('admin/error.html.twig', [
  33.             'message' => $this->translator->trans(Response::$statusTexts[$code], [], 'http')
  34.         ])));
  35.     }
  36. }