mirror of
https://gh.wpcy.net/https://github.com/rilustrisimo/freescout-support.git
synced 2026-04-28 14:22:22 +08:00
225 lines
5 KiB
PHP
225 lines
5 KiB
PHP
<?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;
|
|
}
|
|
}
|