vendor/symfony/symfony/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php line 24

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Bundle\WebProfilerBundle\Controller;
  11. use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Debug\FileLinkFormatter;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Symfony\Component\HttpKernel\Profiler\Profiler;
  16. use Twig\Environment;
  17. use Twig\Error\LoaderError;
  18. use Twig\Loader\ExistsLoaderInterface;
  19. use Twig\Loader\SourceContextLoaderInterface;
  20. @trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.'ExceptionController::class, ExceptionPanelController::class), E_USER_DEPRECATED);
  21. /**
  22.  * ExceptionController.
  23.  *
  24.  * @author Fabien Potencier <fabien@symfony.com>
  25.  *
  26.  * @deprecated since Symfony 4.4, use the ExceptionPanelController instead.
  27.  */
  28. class ExceptionController
  29. {
  30.     protected $twig;
  31.     protected $debug;
  32.     protected $profiler;
  33.     private $errorRenderer;
  34.     public function __construct(Profiler $profiler nullEnvironment $twigbool $debugFileLinkFormatter $fileLinkFormat nullHtmlErrorRenderer $errorRenderer null)
  35.     {
  36.         $this->profiler $profiler;
  37.         $this->twig $twig;
  38.         $this->debug $debug;
  39.         $this->errorRenderer $errorRenderer ?? new HtmlErrorRenderer($debug$this->twig->getCharset(), $fileLinkFormat);
  40.     }
  41.     /**
  42.      * Renders the exception panel for the given token.
  43.      *
  44.      * @param string $token The profiler token
  45.      *
  46.      * @return Response A Response instance
  47.      *
  48.      * @throws NotFoundHttpException
  49.      */
  50.     public function showAction($token)
  51.     {
  52.         if (null === $this->profiler) {
  53.             throw new NotFoundHttpException('The profiler must be enabled.');
  54.         }
  55.         $this->profiler->disable();
  56.         $exception $this->profiler->loadProfile($token)->getCollector('exception')->getException();
  57.         $template $this->getTemplate();
  58.         if (!$this->templateExists($template)) {
  59.             return new Response($this->errorRenderer->getBody($exception), 200, ['Content-Type' => 'text/html']);
  60.         }
  61.         $code $exception->getStatusCode();
  62.         return new Response($this->twig->render(
  63.             $template,
  64.             [
  65.                 'status_code' => $code,
  66.                 'status_text' => Response::$statusTexts[$code],
  67.                 'exception' => $exception,
  68.                 'logger' => null,
  69.                 'currentContent' => '',
  70.             ]
  71.         ), 200, ['Content-Type' => 'text/html']);
  72.     }
  73.     /**
  74.      * Renders the exception panel stylesheet for the given token.
  75.      *
  76.      * @param string $token The profiler token
  77.      *
  78.      * @return Response A Response instance
  79.      *
  80.      * @throws NotFoundHttpException
  81.      */
  82.     public function cssAction($token)
  83.     {
  84.         if (null === $this->profiler) {
  85.             throw new NotFoundHttpException('The profiler must be enabled.');
  86.         }
  87.         $this->profiler->disable();
  88.         $template $this->getTemplate();
  89.         if (!$this->templateExists($template)) {
  90.             return new Response($this->errorRenderer->getStylesheet(), 200, ['Content-Type' => 'text/css']);
  91.         }
  92.         return new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'), 200, ['Content-Type' => 'text/css']);
  93.     }
  94.     protected function getTemplate()
  95.     {
  96.         return '@Twig/Exception/'.($this->debug 'exception' 'error').'.html.twig';
  97.     }
  98.     protected function templateExists($template)
  99.     {
  100.         $loader $this->twig->getLoader();
  101.         if (=== Environment::MAJOR_VERSION && !$loader instanceof ExistsLoaderInterface) {
  102.             try {
  103.                 if ($loader instanceof SourceContextLoaderInterface) {
  104.                     $loader->getSourceContext($template);
  105.                 } else {
  106.                     $loader->getSource($template);
  107.                 }
  108.                 return true;
  109.             } catch (LoaderError $e) {
  110.             }
  111.             return false;
  112.         }
  113.         return $loader->exists($template);
  114.     }
  115. }