src/EventListener/ExceptionSubscriber.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  8. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  9. /**
  10.  * Class ExceptionSubscriber
  11.  *
  12.  * @package App\EventListener
  13.  */
  14. class ExceptionSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var SessionInterface $session
  18.      */
  19.     private $session;
  20.     /**
  21.      * @var LoggerInterface
  22.      */
  23.     private $logger;
  24.     /**
  25.      * ExceptionSubscriber constructor.
  26.      *
  27.      * @param SessionInterface $session
  28.      * @param LoggerInterface  $logger
  29.      */
  30.     public function __construct(SessionInterface $sessionLoggerInterface $logger)
  31.     {
  32.         $this->session $session;
  33.         $this->logger  $logger;
  34.     }
  35.     /**
  36.      * @param GetResponseForExceptionEvent $event
  37.      */
  38.     public function onKernelHandleException(GetResponseForExceptionEvent $event)
  39.     {
  40.         $exception  $event->getException();
  41.         $referer    $event->getRequest()->headers->get('referer');
  42.         $currentUri $event->getRequest()->getRequestUri();
  43.         if (!($exception instanceof NotFoundHttpException) && getenv('APP_ENV') !== 'dev') {
  44.             $this
  45.                 ->session
  46.                 ->getFlashBag()
  47.                 ->add('error'$exception->getMessage());
  48.             $this
  49.                 ->logger
  50.                 ->critical($exception->getMessage(), $exception->getTrace());
  51.             $response = new RedirectResponse('/');
  52.             $pos      strpos($referer$currentUri);
  53.             if ($referer && $pos !== false) {
  54.                 $response->headers->set('location'$referer);
  55.             }
  56.             $event->setResponse($response);
  57.         }
  58.     }
  59.     /**
  60.      * @return array
  61.      */
  62.     public static function getSubscribedEvents(): array
  63.     {
  64.         return [
  65.             'kernel.exception' => 'onKernelHandleException'
  66.         ];
  67.     }
  68. }