/
var
/
www
/
html
/
restaurants
/
vendor
/
symfony
/
twig-bundle
/
Controller
/
Upload File
HOME
<?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' => 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); } }