engine || $new) {
$this->engine = new PlatesEngine(
dirname($this->config->get('path.found')),
ltrim($this->config->get('extension', '.tpl'), '.')
);
foreach ($this->folders as $namespace => $folder) {
$this->engine->addFolder($namespace, $folder['folder'], $folder['fallback']);
}
foreach ($this->extensions as $extension) {
$this->engine->loadExtension($extension);
}
}
return $this->engine;
}
/**
* Method to set property engine
*
* @param PlatesEngine $engine
*
* @return static Return self to support chaining.
*/
public function setEngine($engine)
{
if (!($engine instanceof PlatesEngine)) {
throw new \InvalidArgumentException('Engine object should be Mustache_Engine');
}
$this->engine = $engine;
return $this;
}
/**
* render
*
* @param string $file
* @param array $data
*
* @return string
*/
public function render($file, $data = [])
{
$path = $this->findFile($file);
$this->config->set('path.found', $path);
return $this->getEngine()->render($file, $data);
}
/**
* findFile
*
* @param string $file
* @param string $ext
*
* @return string
*/
public function findFile($file, $ext = '')
{
$ext = $ext ?: $this->config->get('extension', 'tpl');
return parent::findFile($file, $ext);
}
/**
* addExtension
*
* @param ExtensionInterface $extension
*
* @return static
*/
public function addExtension(ExtensionInterface $extension)
{
$this->extensions[] = $extension;
return $this;
}
/**
* addFolder
*
* @param string $namespace
* @param string $folder
* @param boolean $fallback
*
* @return static
*/
public function addFolder($namespace, $folder, $fallback = false)
{
$this->folders[$namespace] = [
'folder' => $folder,
'fallback' => $fallback,
];
return $this;
}
}