1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
<?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
namespace Nette\Bridges\ApplicationDI;
use Nette;
use Latte;
/**
* Latte extension for Nette DI.
*/
class LatteExtension extends Nette\DI\CompilerExtension
{
public $defaults = [
'xhtml' => FALSE,
'macros' => [],
];
/** @var bool */
private $debugMode;
/** @var string */
private $tempDir;
public function __construct($tempDir, $debugMode = FALSE)
{
$this->tempDir = $tempDir;
$this->debugMode = $debugMode;
}
public function loadConfiguration()
{
if (!class_exists(Latte\Engine::class)) {
return;
}
$config = $this->validateConfig($this->defaults);
$builder = $this->getContainerBuilder();
$builder->addDefinition($this->prefix('latteFactory'))
->setClass(Latte\Engine::class)
->addSetup('setTempDirectory', [$this->tempDir])
->addSetup('setAutoRefresh', [$this->debugMode])
->addSetup('setContentType', [$config['xhtml'] ? Latte\Compiler::CONTENT_XHTML : Latte\Compiler::CONTENT_HTML])
->addSetup('Nette\Utils\Html::$xhtml = ?', [(bool) $config['xhtml']])
->setImplement(Nette\Bridges\ApplicationLatte\ILatteFactory::class);
$builder->addDefinition($this->prefix('templateFactory'))
->setClass(Nette\Application\UI\ITemplateFactory::class)
->setFactory(Nette\Bridges\ApplicationLatte\TemplateFactory::class);
foreach ($config['macros'] as $macro) {
if (strpos($macro, '::') === FALSE && class_exists($macro)) {
$macro .= '::install';
}
$this->addMacro($macro);
}
if ($this->name === 'latte') {
$builder->addAlias('nette.latteFactory', $this->prefix('latteFactory'));
$builder->addAlias('nette.templateFactory', $this->prefix('templateFactory'));
}
}
/**
* @param callable
* @return void
*/
public function addMacro(callable $macro)
{
$builder = $this->getContainerBuilder();
$builder->getDefinition($this->prefix('latteFactory'))
->addSetup('?->onCompile[] = function ($engine) { ' . $macro . '($engine->getCompiler()); }', ['@self']);
}
}
|