app/Service/Controller/ErrorController.php line 40

Open in your IDE?
  1. <?php
  2. namespace Sq\Service\Controller;
  3. use Sq\Service\Environment;
  4. use Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpKernel\KernelInterface;
  8. class ErrorController extends AbstractController
  9. {
  10.     /** @var Environment */
  11.     protected $environment;
  12.     /** @var RequestStack */
  13.     protected $requestStack;
  14.     /** @var KernelInterface */
  15.     protected $kernel;
  16.     /** @var ErrorRendererInterface */
  17.     protected $symfonyErrorRenderer;
  18.     public function __construct(Environment $environmentRequestStack $requestStackKernelInterface $kernelErrorRendererInterface $symfonyErrorRenderer)
  19.     {
  20.         $this->environment $environment;
  21.         $this->requestStack $requestStack;
  22.         $this->kernel $kernel;
  23.         $this->symfonyErrorRenderer $symfonyErrorRenderer;
  24.     }
  25.     /**
  26.      * An error occured, display the output.
  27.      *
  28.      * @param \Throwable $exception
  29.      *
  30.      * @return Response
  31.      */
  32.     public function show(\Throwable $exception)
  33.     {
  34.         $exception $this->symfonyErrorRenderer->render($exception);
  35.         $statusCode $exception->getStatusCode();
  36.         if ($this->environment->isProd() || !$this->environment->isDebug())
  37.         {
  38.             if ($statusCode === 404)
  39.             {
  40.                 return $this->error404();
  41.             }
  42.             return $this->error500();
  43.         }
  44.         // This will render the Symfony detailed error page.
  45.         return new Response($exception->getAsString(), $exception->getStatusCode(), $exception->getHeaders());
  46.     }
  47.     /**
  48.      * Renders the 404 error page.
  49.      * Must be public as it is called from 404.php for legacy reasons.
  50.      *
  51.      * @return Response
  52.      */
  53.     public function error404(): Response
  54.     {
  55.         $response = new Response();
  56.         $response->setStatusCode(404);
  57.         // add 404 status code to Request attributes for further handling down the line (UserTrackingService will be skipped)
  58.         $currentRequest $this->requestStack->getCurrentRequest();
  59.         if ($currentRequest)
  60.         {
  61.             $currentRequest->attributes->set('sq_status_code'404);
  62.         }
  63.         if ($this->getCurrentMember())
  64.         {
  65.             return $this->renderAppPage("shared/error/404.php", [], $response);
  66.         }
  67.         return $this->renderMarketingPage("shared/error/404.php", [], $response);
  68.     }
  69.     /**
  70.      * Renders the 500 error page.
  71.      * Must be public as it is called from errors.inc.php for legacy reasons.
  72.      *
  73.      * @param \Throwable|null $e
  74.      *   A throwable to show details on if its in dev mode.
  75.      *
  76.      * @return Response
  77.      */
  78.     public function error500(?\Throwable $e null): Response
  79.     {
  80.         $response = new Response();
  81.         $response->setStatusCode(500);
  82.         if ($this->getCurrentMember())
  83.         {
  84.             return $this->renderAppPage("shared/error/500.php", ['exception' => $e], $response);
  85.         }
  86.         return $this->renderMarketingPage("shared/error/500.php", ['exception' => $e], $response);
  87.     }
  88. }