src/CmsBundle/EventListener/ExceptionListener.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\CmsBundle\EventListener;
  3. use Doctrine\ORM\EntityManager;
  4. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  7. use App\CmsBundle\Entity\Settings;
  8. use Twig\Environment;
  9. class ExceptionListener
  10. {
  11.     private $em;
  12.     private $container;
  13.     private $twig;
  14.     function __construct(EntityManager $em$containerEnvironment $twig) {
  15.         $this->em $em;
  16.         $this->container $container;
  17.         $this->twig $twig;
  18.     }
  19.     public function onKernelException(ExceptionEvent $event)
  20.     {
  21.         // You get the exception object from the received event
  22.         $exception $event->getThrowable();
  23.         $session $this->container->get('session');
  24.         $request $this->container->get('request_stack')->getCurrentRequest() ;
  25.         $language null;
  26.         $languages $this->em->getRepository('CmsBundle:Language')->findAll();
  27.         if (empty($request)) {
  28.             $localeInRequest 'nl';
  29.         } else {
  30.             $localeInRequest $request->getLocale();
  31.         }
  32.         if ($localeInRequest == 'en') {
  33.             $localeInRequest 'gb';
  34.         }
  35.         // THIS should be in setRequest() but needs more testing. And other Settings queries need to be adapted.
  36.         $language $this->em->getRepository('CmsBundle:Language')->findOneBy(['locale' => $localeInRequest]);
  37.         if(empty($language)){
  38.             $language $this->em->getRepository('CmsBundle:Language')->findOneBy([], ['id' => 'asc']);
  39.         }
  40.         $Settings null;
  41.         if (!empty($request)) {
  42.             if(preg_match('/(\/[a-z]{2})(\/.*?)?$/'$request->getPathInfo(), $m)){
  43.                 $Settings $this->em->getRepository('CmsBundle:Settings')->findOneBy(['base_uri' => $m[1]]);
  44.             }else{
  45.                 $Settings $this->em->getRepository('CmsBundle:Settings')->findOneBy(['host' => str_replace('www.'''$request->getHttpHost())]);
  46.             }
  47.         } else {
  48.             $Settings $this->em->getRepository(Settings::class)->findOneBy(['language' => $language]);
  49.         }
  50.         if(empty($Settings)){
  51.             $locale $session->get('_locale');
  52.             if($locale){
  53.                 $language $this->em->getRepository('CmsBundle:Language')->findOneByLocale($locale);
  54.             }else{
  55.                 $language $languages[0];
  56.             }
  57.         }else{
  58.             $language $Settings->getLanguage();
  59.         }
  60.         if($language == null){
  61.             // Might happen after changing locale for a language
  62.             $language $languages[0];
  63.         }
  64.         if(empty($Settings)){
  65.             $Settings $language->getSettings()->first();
  66.         }
  67.         if(empty($Settings)){
  68.             $Settings $this->em->getRepository('CmsBundle:Settings')->findOneBy([]);
  69.         }
  70.         if($this->container->getParameter('kernel.environment') == 'dev'){
  71.             dump($exception);
  72.         die();
  73.         }
  74.         $Page $this->em->getRepository('CmsBundle:Page')->findOneBy(['label' => 'error''enabled' => true'settings' => $Settings]);
  75.         if(empty($Page)){
  76.             $Page $this->em->getRepository('CmsBundle:Page')->findOneBy(['page' => null'enabled' => true'settings' => $Settings], ['sort' => 'asc']);
  77.         }
  78.         $pageMetatags = [];
  79.         $systemMetatags = [];
  80.         if(!empty($Page)){
  81.             $Page->exception $exception;
  82.             $Page->mode $this->container->getParameter('kernel.environment');
  83.             $pageMetatags   $this->em->getRepository('CmsBundle:Metatag')->getBySystem(0, (int)$Page->getId(), true);
  84.             $systemMetatags $this->em->getRepository('CmsBundle:Metatag')->getBySystem(1falsefalse);
  85.         }
  86.         $response = new Response($this->twig->render('@Cms/page/page.html.twig', array(
  87.             'exception' => $exception,
  88.             'Page' => $Page,
  89.             'metatags' => $pageMetatags,
  90.             'systemMetatags' => $systemMetatags,
  91.             'language' => $language,
  92.             'Settings' => $Settings,
  93.             'languages' => $languages,
  94.             'version' => '',
  95.         )));
  96.         // sends the modified response object to the event
  97.         $event->setResponse($response);
  98.     }
  99. }