src/EventListener/ExceptionListener.php line 30

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright (c) 2011-present Qualiteam software Ltd. All rights reserved.
  4.  * See https://www.x-cart.com/license-agreement.html for license details.
  5.  */
  6. namespace XCart\EventListener;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Twig\Environment;
  10. use XLite\Core\Exception\ClosedStorefrontException;
  11. use XLite\Logger;
  12. class ExceptionListener
  13. {
  14.     private Logger $logger;
  15.     private Environment $twig;
  16.     public function __construct(
  17.         Logger $logger,
  18.         Environment $twig
  19.     ) {
  20.         $this->logger $logger;
  21.         $this->twig $twig;
  22.     }
  23.     public function onKernelException(ExceptionEvent $event): void
  24.     {
  25.         if ($event->getThrowable() instanceof ClosedStorefrontException) {
  26.             $event->stopPropagation();
  27.             $event->setResponse(new Response($this->twig->render('closed.twig')));
  28.         } else {
  29.             $this->logger->executePostponedLogs();
  30.             $this->logger->registerException($event->getThrowable());
  31.         }
  32.         // This is required to show the error page without HTML garbage
  33.         while (ob_get_level() !== 0) {
  34.             ob_end_clean();
  35.         }
  36.     }
  37. }