vendor/pimcore/pimcore/lib/Templating/TwigDefaultDelegatingEngine.php line 63

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Templating;
  15. use Pimcore\Config;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Templating\DelegatingEngine as BaseDelegatingEngine;
  18. use Symfony\Component\Templating\EngineInterface;
  19. use Twig\Environment;
  20. use Twig\Extension\SandboxExtension;
  21. /**
  22.  * @internal
  23.  */
  24. class TwigDefaultDelegatingEngine extends BaseDelegatingEngine
  25. {
  26.     /**
  27.      * @var bool
  28.      */
  29.     protected $delegate false;
  30.     /**
  31.      * @param EngineInterface[] $engines
  32.      */
  33.     public function __construct(protected Environment $twig, protected Config $config, array $engines = [])
  34.     {
  35.         parent::__construct($engines);
  36.     }
  37.     /**
  38.      * {@inheritdoc}
  39.      */
  40.     public function exists($name): bool
  41.     {
  42.         if (!$this->delegate) {
  43.             return $this->twig->getLoader()->exists($name);
  44.         } else {
  45.             return parent::exists($name);
  46.         }
  47.     }
  48.     /**
  49.      * {@inheritdoc}
  50.      *
  51.      * @throws \Exception
  52.      */
  53.     public function render($name, array $parameters = []): string
  54.     {
  55.         if (!$this->delegate) {
  56.             return $this->twig->render($name$parameters);
  57.         } else {
  58.             return parent::render($name$parameters);
  59.         }
  60.     }
  61.     /**
  62.      * {@inheritdoc}
  63.      */
  64.     public function supports($name): bool
  65.     {
  66.         if (!$this->delegate) {
  67.             return true;
  68.         } else {
  69.             return parent::supports($name);
  70.         }
  71.     }
  72.     /**
  73.      * @param bool $delegate
  74.      */
  75.     public function setDelegate(bool $delegate)
  76.     {
  77.         $this->delegate $delegate;
  78.     }
  79.     /**
  80.      * @return bool $delegate
  81.      */
  82.     public function isDelegate()
  83.     {
  84.         return $this->delegate;
  85.     }
  86.     public function getTwigEnvironment(bool $sandboxed false): Environment
  87.     {
  88.         if ($sandboxed) {
  89.             /** @var SandboxExtension $sandboxExtension */
  90.             $sandboxExtension $this->twig->getExtension(SandboxExtension::class);
  91.             $sandboxExtension->enableSandbox();
  92.         }
  93.         return $this->twig;
  94.     }
  95.     public function disableSandboxExtensionFromTwigEnvironment(): void
  96.     {
  97.         /** @var SandboxExtension $sandboxExtension */
  98.         $sandboxExtension $this->twig->getExtension(SandboxExtension::class);
  99.         $sandboxExtension->disableSandbox();
  100.     }
  101.     /**
  102.      * @param string $view
  103.      * @param array $parameters
  104.      * @param Response|null $response
  105.      *
  106.      * @return Response
  107.      *
  108.      * @throws \Exception
  109.      */
  110.     public function renderResponse($view, array $parameters = [], Response $response null)
  111.     {
  112.         if (null === $response) {
  113.             $response = new Response();
  114.         }
  115.         $response->setContent($this->render($view$parameters));
  116.         return $response;
  117.     }
  118. }