Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/windwalker/renderer/TwigRenderer.php
4f5a31d2
 <?php declare(strict_types=1);
 /**
  * Part of Windwalker project.
  *
  * @copyright  Copyright (C) 2019 LYRASOFT.
  * @license    LGPL-2.0-or-later
  */
 
 namespace Windwalker\Renderer;
 
 use Windwalker\Renderer\Twig\GlobalContainer;
 use Windwalker\Renderer\Twig\TwigFilesystemLoader;
 use Windwalker\Structure\Structure;
 
 /**
  * Class PhpRenderer
  *
  * @since 2.0
  */
 class TwigRenderer extends AbstractEngineRenderer
 {
     /**
      * Property twig.
      *
      * @var  \Twig_Environment
      */
     protected $engine = null;
 
     /**
      * Property loader.
      *
      * @var  \Twig_LoaderInterface
      */
     protected $loader = null;
 
     /**
      * Property extensions.
      *
      * @var  \Twig_ExtensionInterface[]
      */
     protected $extensions = [];
 
     /**
      * Property config.
      *
      * @var  Structure|array
      */
     protected $config = [];
 
     /**
      * Property debugExtension.
      *
      * @var  \Twig_Extension_Debug
      */
     protected $debugExtension = null;
 
     /**
      * render
      *
      * @param string       $file
      * @param array|object $data
      *
      * @throws  \UnexpectedValueException
      * @return  string
      */
     public function render($file, $data = [])
     {
         $file = pathinfo($file, PATHINFO_EXTENSION) === 'twig' ? $file : $file . '.twig';
 
         $this->extensions = array_merge($this->extensions, (array) $this->config->get('extensions', []));
 
         return $this->getEngine()->render($file, $data);
     }
 
     /**
      * getLoader
      *
      * @return  \Twig_LoaderInterface
      */
     public function getLoader()
     {
         if (!$this->loader) {
             if ($this->config->get('path_separator')) {
                 $this->loader = new TwigFilesystemLoader(
                     iterator_to_array(clone $this->getPaths()),
                     $this->config->get('path_separator')
                 );
             } else {
                 $this->loader = new \Twig_Loader_Filesystem(iterator_to_array(clone $this->getPaths()));
             }
         }
 
         return $this->loader;
     }
 
     /**
      * setLoader
      *
      * @param   \Twig_LoaderInterface $loader
      *
      * @return  TwigRenderer  Return self to support chaining.
      */
     public function setLoader(\Twig_LoaderInterface $loader)
     {
         $this->loader = $loader;
 
         return $this;
     }
 
     /**
      * addExtension
      *
      * @param \Twig_ExtensionInterface $extension
      *
      * @return  static
      */
     public function addExtension(\Twig_ExtensionInterface $extension)
     {
         $this->extensions[] = $extension;
 
         return $this;
     }
 
     /**
      * getTwig
      *
      * @param bool $new
      *
      * @return  \Twig_Environment
      */
     public function getEngine($new = false)
     {
         if (!($this->engine instanceof \Twig_Environment) || $new) {
             $this->engine = new \Twig_Environment($this->getLoader(), $this->config->toArray());
 
             foreach (GlobalContainer::getExtensions() as $extension) {
                 $this->engine->addExtension(clone $extension);
             }
 
             foreach ($this->extensions as $extension) {
                 $this->engine->addExtension($extension);
             }
 
             foreach (GlobalContainer::getGlobals() as $name => $value) {
                 $this->engine->addGlobal($name, $value);
             }
 
             if ($this->config->get('debug')) {
                 $this->engine->addExtension($this->getDebugExtension());
             }
         }
 
         return $this->engine;
     }
 
     /**
      * setTwig
      *
      * @param   \Twig_Environment $twig
      *
      * @return  TwigRenderer  Return self to support chaining.
      */
     public function setEngine($twig)
     {
         if (!($twig instanceof \Twig_Environment)) {
             throw new \InvalidArgumentException('Engine object should be Twig_environment');
         }
 
         $this->engine = $twig;
 
         return $this;
     }
 
     /**
      * Method to get property DebugExtension
      *
      * @return  \Twig_Extension_Debug
      */
     public function getDebugExtension()
     {
         if (!$this->debugExtension) {
             $this->debugExtension = new \Twig_Extension_Debug();
         }
 
         return $this->debugExtension;
     }
 
     /**
      * Method to set property debugExtension
      *
      * @param   \Twig_ExtensionInterface $debugExtension
      *
      * @return  static  Return self to support chaining.
      */
     public function setDebugExtension(\Twig_ExtensionInterface $debugExtension)
     {
         $this->debugExtension = $debugExtension;
 
         return $this;
     }
 
     /**
      * Method to get property Extensions
      *
      * @return  \Twig_ExtensionInterface[]
      */
     public function getExtensions()
     {
         return $this->extensions;
     }
 
     /**
      * Method to set property extensions
      *
      * @param   \Twig_ExtensionInterface[] $extensions Twig extenions
      *
      * @return  static  Return self to support chaining.
      */
     public function setExtensions($extensions)
     {
         $this->extensions = $extensions;
 
         return $this;
     }
 }