vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php line 58

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\TwigBundle\Controller;
  11. use Doctrine\ORM\Query\Expr\Base;
  12. use PanelBundle\Controller\BaseController;
  13. use Symfony\Component\Debug\Exception\FlattenException;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
  18. use Twig\Environment;
  19. use Twig\Error\LoaderError;
  20. use Twig\Loader\ExistsLoaderInterface;
  21. use Twig\Loader\SourceContextLoaderInterface;
  22. /**
  23.  * ExceptionController renders error or exception pages for a given
  24.  * FlattenException.
  25.  *
  26.  * @author Fabien Potencier <fabien@symfony.com>
  27.  * @author Matthias Pigulla <mp@webfactory.de>
  28.  */
  29. class ExceptionController extends BaseController
  30. {
  31.     protected $twig;
  32.     protected $debug;
  33.     /**
  34.      * @param bool $debug Show error (false) or exception (true) pages by default
  35.      */
  36.     public function __construct(Environment $twig$debug)
  37.     {
  38.         $this->twig $twig;
  39.         $this->debug $debug;
  40.     }
  41.     /**
  42.      * Converts an Exception to a Response.
  43.      *
  44.      * A "showException" request parameter can be used to force display of an error page (when set to false) or
  45.      * the exception page (when true). If it is not present, the "debug" value passed into the constructor will
  46.      * be used.
  47.      *
  48.      * @return Response
  49.      *
  50.      * @throws \InvalidArgumentException When the exception template does not exist
  51.      */
  52.     public function showAction(Request $requestFlattenException $exceptionDebugLoggerInterface $logger null)
  53.     {
  54.         $currentContent $this->getAndCleanOutputBuffering($request->headers->get('X-Php-Ob-Level', -1));
  55.         $showException $request->attributes->get('showException'$this->debug); // As opposed to an additional parameter, this maintains BC
  56.         $code $exception->getStatusCode();
  57.         if ($this->ayarlar('hataPage')==1){
  58.             return new RedirectResponse($this->ayarlar('siteYolu'));
  59.         }else {
  60.             return new Response($this->twig->render(
  61.                 (string)$this->findTemplate($request$request->getRequestFormat(), $code$showException),
  62.                 [
  63.                     'status_code' => $code,
  64.                     'status_text' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : '',
  65.                     'exception' => $exception,
  66.                     'logger' => $logger,
  67.                     'currentContent' => $currentContent,
  68.                 ]
  69.             ), 200, ['Content-Type' => $request->getMimeType($request->getRequestFormat()) ?: 'text/html']);
  70.         }
  71.     }
  72.     /**
  73.      * @param int $startObLevel
  74.      *
  75.      * @return string
  76.      */
  77.     protected function getAndCleanOutputBuffering($startObLevel)
  78.     {
  79.         if (ob_get_level() <= $startObLevel) {
  80.             return '';
  81.         }
  82.         Response::closeOutputBuffers($startObLevel 1true);
  83.         return ob_get_clean();
  84.     }
  85.     /**
  86.      * @param string $format
  87.      * @param int    $code          An HTTP response status code
  88.      * @param bool   $showException
  89.      *
  90.      * @return string
  91.      */
  92.     protected function findTemplate(Request $request$format$code$showException)
  93.     {
  94.         $name $showException 'exception' 'error';
  95.         if ($showException && 'html' == $format) {
  96.             $name 'exception_full';
  97.         }
  98.         // For error pages, try to find a template for the specific HTTP status code and format
  99.         if (!$showException) {
  100.             $template sprintf('@Twig/Exception/%s%s.%s.twig'$name$code$format);
  101.             if ($this->templateExists($template)) {
  102.                 return $template;
  103.             }
  104.         }
  105.         // try to find a template for the given format
  106.         $template sprintf('@Twig/Exception/%s.%s.twig'$name$format);
  107.         if ($this->templateExists($template)) {
  108.             return $template;
  109.         }
  110.         // default to a generic HTML exception
  111.         $request->setRequestFormat('html');
  112.         return sprintf('@Twig/Exception/%s.html.twig'$showException 'exception_full' $name);
  113.     }
  114.     // to be removed when the minimum required version of Twig is >= 2.0
  115.     protected function templateExists($template)
  116.     {
  117.         $template = (string) $template;
  118.         $loader $this->twig->getLoader();
  119.         if (=== Environment::MAJOR_VERSION && !$loader instanceof ExistsLoaderInterface) {
  120.             try {
  121.                 if ($loader instanceof SourceContextLoaderInterface) {
  122.                     $loader->getSourceContext($template);
  123.                 } else {
  124.                     $loader->getSource($template);
  125.                 }
  126.                 return true;
  127.             } catch (LoaderError $e) {
  128.             }
  129.             return false;
  130.         }
  131.         return $loader->exists($template);
  132.     }
  133. }