src/Controller/Page/ExceptionController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Page;
  3. use App\Entity\Page as PageEntity;
  4. use App\Renderer\Page as PageRenderer;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Gedmo\Translatable\TranslatableListener;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  9. use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Twig\Environment;
  13. use Twig\Error\LoaderError;
  14. use Twig\Error\RuntimeError;
  15. use Twig\Error\SyntaxError;
  16. class ExceptionController extends AbstractController
  17. {
  18.     /**
  19.      * ExceptionController constructor.
  20.      */
  21.     public function __construct(
  22.         private readonly Environment $twig,
  23.         private readonly EntityManagerInterface $manager,
  24.         private readonly ParameterBagInterface $parameterBag,
  25.         private readonly PageRenderer $pageRenderer,
  26.         private readonly HtmlErrorRenderer $errorRenderer,
  27.         private readonly ?TranslatableListener $translatableListener null
  28.     ) {
  29.     }
  30.     /**
  31.      * Converts an Exception to a Response.
  32.      *
  33.      * A "showException" request parameter can be used to force display of an error page (when set to false) or
  34.      * the exception page (when true). If it is not present, the "debug" value passed into the constructor will
  35.      * be used.
  36.      *
  37.      * @throws LoaderError
  38.      * @throws SyntaxError
  39.      * @throws RuntimeError
  40.      */
  41.     public function show(Request $request\Throwable $exception): Response
  42.     {
  43.         $this->translatableListener?->setTranslatableLocale($this->parameterBag->get('site_translation_default_locale'));
  44.         $flattenException $this->errorRenderer->render($exception);
  45.         if ('prod' !== $_ENV['APP_ENV']
  46.             || !$notFoundPage $this->manager
  47.                 ->getRepository(PageEntity::class)
  48.                 ->findOneBy([
  49.                     'alias' => $flattenException->getStatusCode().'_page',
  50.                 ])
  51.         ) {
  52.             return new Response(
  53.                 $flattenException->getAsString(),
  54.                 $flattenException->getStatusCode(),
  55.                 $flattenException->getHeaders()
  56.             );
  57.         }
  58.         $content $this->twig->render(
  59.             '@default/pages/pages_index.html.twig',
  60.             [
  61.                 'header' => $this->pageRenderer->getHeader(),
  62.                 'footer' => $this->pageRenderer->getFooter(),
  63.                 'page' => $notFoundPage,
  64.             ]
  65.         );
  66.         return new Response($content$flattenException->getStatusCode(), [
  67.             'Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html',
  68.         ]);
  69.     }
  70. }