src/EventListener/ExceptionListener.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Footer;
  4. use App\Entity\MenuLibelle;
  5. use App\Entity\PagesLegales;
  6. use App\Service\EpingleService;
  7. use App\Service\SeoService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Dompdf\Dompdf;
  10. use Dompdf\Options;
  11. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Twig\Environment;
  14. class ExceptionListener
  15. {
  16.   public mixed $params = [];
  17.   public function __construct(
  18.     private EntityManagerInterface $em,
  19.     private EpingleService $epingle_service,
  20.     private Environment $twig,
  21.     private SeoService $seo_service
  22.   ) {
  23.     $this->params['menusTop'] = $this->em->getRepository(MenuLibelle::class)->findBy(['ordre' => 0]);
  24.     $this->params['menusprofile'] = $this->em->getRepository(MenuLibelle::class)->getMenuProfile();
  25.   }
  26.   public function onKernelException(ExceptionEvent $event)
  27.   {
  28.     $request $event->getRequest();
  29.     $this->params['referer'] = $request->headers->get('referer');
  30.     $this->params['footer'] = $this->em->getRepository(Footer::class)->find(1);
  31.     $this->params['post'] = $this->em->getRepository(PagesLegales::class)->findOneBy(['slug' => 'erreur404']);
  32.     $this->params['meta_description'] = "La page " $this->params['post']->getTitre() . " du Département du Nord";
  33.     $this->params['title'] = $this->params['post']->getTitre();
  34.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  35.     $this->params['is_pdf'] = 0;
  36.     $this->params['is_preview'] = 0;
  37.     $epingles_ $this->epingle_service->getEpinglesSection('legales_lenord');
  38.     foreach ($epingles_ as $epingle) {
  39.       array_push($this->params['epingles'], $epingle);
  40.     }
  41.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => "Erreur 404"]];
  42.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  43.     if ($request->get('function') == 'download_pdf') {
  44.       $this->params['is_pdf'] = 1;
  45.       $pdfOptions = new Options();
  46.       $pdfOptions->set('defaultFont''Arial');
  47.       $pdfOptions->setIsRemoteEnabled(true);
  48.       $dompdf = new Dompdf($pdfOptions);
  49.       $html $this->twig->render('Lenord/Main/detail_page_legale.html.twig'$this->params);
  50.       $dompdf->loadHtml($html);
  51.       $dompdf->setPaper('A4''portrait');
  52.       $dompdf->render();
  53.       $output $dompdf->output();
  54.       $title null;
  55.       if ($this->params['post'] != null) {
  56.         $title $this->params['post']->getTitre();
  57.       } else {
  58.         $title uniqid();
  59.       }
  60.       $filename sprintf('le-nord-%s.pdf'$title);
  61.       return new Response(
  62.         $output,
  63.         200,
  64.         [
  65.           'Content-Type' => 'application/pdf',
  66.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  67.         ]
  68.       );
  69.     } else {
  70.       $response = new Response();
  71.       if ($request->getHost() !== 'nordinfo.spontaneit.fr' && $request->getHost() !== 'lenord.spontaneit.fr' && $request->getHost() !== 'serviceslenord.spontaneit.fr' && $request->getHost() !== 'nordinfo5.local' && $request->getHost() !== 'lenord.local' && $request->getHost() !== 'services.local' && $request->getHost() !== 'localhost') {
  72.         $html $this->twig->render('bundles/TwigBundle/Exception/error404.html.twig'$this->params);
  73.         $response->setContent($html);
  74.         $event->setResponse($response);
  75.       }
  76.     }
  77.   }
  78. }