core/lib/Thelia/Action/RedirectException.php line 30

  1. <?php
  2. /*
  3.  * This file is part of the Thelia package.
  4.  * http://www.thelia.net
  5.  *
  6.  * (c) OpenStudio <info@thelia.net>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Thelia\Action;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. use Thelia\Core\HttpKernel\Exception\RedirectException as ExceptionRedirectException;
  17. use Thelia\Core\Security\Exception\AuthenticationException;
  18. use Thelia\Tools\URL;
  19. /**
  20.  * Class RedirectException.
  21.  *
  22.  * @author manuel raynaud <manu@raynaud.io>
  23.  */
  24. class RedirectException extends BaseAction implements EventSubscriberInterface
  25. {
  26.     public function checkRedirectException(ExceptionEvent $event): void
  27.     {
  28.         $exception $event->getThrowable();
  29.         if ($exception instanceof ExceptionRedirectException) {
  30.             $response = new RedirectResponse($exception->getUrl(), $exception->getStatusCode());
  31.             $event->setResponse($response);
  32.         } elseif ($exception instanceof AuthenticationException) {
  33.             // Redirect to the login template
  34.             $response = new RedirectResponse(URL::getInstance()->viewUrl($exception->getLoginTemplate()));
  35.             $event->setResponse($response);
  36.         }
  37.     }
  38.     /**
  39.      * {@inheritdoc}
  40.      */
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             KernelEvents::EXCEPTION => ['checkRedirectException'128],
  45.         ];
  46.     }
  47. }