- <?php
- /*
-  * This file is part of the Symfony package.
-  *
-  * (c) Fabien Potencier <fabien@symfony.com>
-  *
-  * For the full copyright and license information, please view the LICENSE
-  * file that was distributed with this source code.
-  */
- namespace Symfony\Bundle\TwigBundle\Controller;
- use Symfony\Component\Debug\Exception\FlattenException;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
- use Twig\Environment;
- use Twig\Error\LoaderError;
- use Twig\Loader\ExistsLoaderInterface;
- use Twig\Loader\SourceContextLoaderInterface;
- @trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ExceptionController::class, \Symfony\Component\HttpKernel\Controller\ErrorController::class), E_USER_DEPRECATED);
- /**
-  * ExceptionController renders error or exception pages for a given
-  * FlattenException.
-  *
-  * @author Fabien Potencier <fabien@symfony.com>
-  * @author Matthias Pigulla <mp@webfactory.de>
-  *
-  * @deprecated since Symfony 4.4, use Symfony\Component\HttpKernel\Controller\ErrorController instead.
-  */
- class ExceptionController
- {
-     protected $twig;
-     protected $debug;
-     /**
-      * @param bool $debug Show error (false) or exception (true) pages by default
-      */
-     public function __construct(Environment $twig, bool $debug)
-     {
-         $this->twig = $twig;
-         $this->debug = $debug;
-     }
-     /**
-      * Converts an Exception to a Response.
-      *
-      * A "showException" request parameter can be used to force display of an error page (when set to false) or
-      * the exception page (when true). If it is not present, the "debug" value passed into the constructor will
-      * be used.
-      *
-      * @return Response
-      *
-      * @throws \InvalidArgumentException When the exception template does not exist
-      */
-     public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null)
-     {
-         $currentContent = $this->getAndCleanOutputBuffering($request->headers->get('X-Php-Ob-Level', -1));
-         $showException = $request->attributes->get('showException', $this->debug); // As opposed to an additional parameter, this maintains BC
-         $code = $exception->getStatusCode();
-         return new Response($this->twig->render(
-             (string) $this->findTemplate($request, $request->getRequestFormat(), $code, $showException),
-             [
-                 'status_code' => $code,
-                 'status_text' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : '',
-                 'exception' => $exception,
-                 'logger' => $logger,
-                 'currentContent' => $currentContent,
-             ]
-         ), 200, ['Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html']);
-     }
-     /**
-      * @param int $startObLevel
-      *
-      * @return string
-      */
-     protected function getAndCleanOutputBuffering($startObLevel)
-     {
-         if (ob_get_level() <= $startObLevel) {
-             return '';
-         }
-         Response::closeOutputBuffers($startObLevel + 1, true);
-         return ob_get_clean();
-     }
-     /**
-      * @param string $format
-      * @param int    $code          An HTTP response status code
-      * @param bool   $showException
-      *
-      * @return string
-      */
-     protected function findTemplate(Request $request, $format, $code, $showException)
-     {
-         $name = $showException ? 'exception' : 'error';
-         if ($showException && 'html' == $format) {
-             $name = 'exception_full';
-         }
-         // For error pages, try to find a template for the specific HTTP status code and format
-         if (!$showException) {
-             $template = sprintf('@Twig/Exception/%s%s.%s.twig', $name, $code, $format);
-             if ($this->templateExists($template)) {
-                 return $template;
-             }
-         }
-         // try to find a template for the given format
-         $template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format);
-         if ($this->templateExists($template)) {
-             return $template;
-         }
-         // default to a generic HTML exception
-         $request->setRequestFormat('html');
-         return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name);
-     }
-     // to be removed when the minimum required version of Twig is >= 2.0
-     protected function templateExists($template)
-     {
-         $template = (string) $template;
-         $loader = $this->twig->getLoader();
-         if (1 === Environment::MAJOR_VERSION && !$loader instanceof ExistsLoaderInterface) {
-             try {
-                 if ($loader instanceof SourceContextLoaderInterface) {
-                     $loader->getSourceContext($template);
-                 } else {
-                     $loader->getSource($template);
-                 }
-                 return true;
-             } catch (LoaderError $e) {
-             }
-             return false;
-         }
-         return $loader->exists($template);
-     }
- }
-