From 2164f21834bee6d12554a59eb94b58e9d93dc952 Mon Sep 17 00:00:00 2001 From: Hugo Sales Date: Thu, 10 Sep 2020 20:38:40 +0000 Subject: [PATCH] [Controller] Fix exception handler to recurse on the exception's previous (in some contexts, RedirectException gets wrapped) --- src/Core/Controller.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Core/Controller.php b/src/Core/Controller.php index 4db979c761..d1169a49b8 100644 --- a/src/Core/Controller.php +++ b/src/Core/Controller.php @@ -30,6 +30,7 @@ namespace App\Core; +use App\Util\Common; use App\Util\Exception\RedirectException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -61,7 +62,7 @@ class Controller extends AbstractController implements EventSubscriberInterface $controller = $event->getController(); $request = $event->getRequest(); - $this->vars = ['controler' => $controller, 'request' => $request]; + $this->vars = ['controler' => $controller, 'request' => $request, 'have_user' => Common::user() !== null]; Event::handle('start_twig_populate_vars', [&$this->vars]); $event->stopPropagation(); @@ -100,13 +101,16 @@ class Controller extends AbstractController implements EventSubscriberInterface public function onKernelException(ExceptionEvent $event) { - if (($except = $event->getThrowable()) instanceof RedirectException) { - if (($redir = $except->redirect_response) != null) { - $event->setResponse($redir); - } else { - $event->setResponse(new RedirectResponse($event->getRequest()->getPathInfo())); + $except = $event->getThrowable(); + do { + if ($except instanceof RedirectException) { + if (($redir = $except->redirect_response) != null) { + $event->setResponse($redir); + } else { + $event->setResponse(new RedirectResponse($event->getRequest()->getPathInfo())); + } } - } + } while ($except != null && ($except = $except->getPrevious()) != null); return $event; }