Registrace a konfigurace latte filteru ve třídě extension
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- fary
 - Člen | 155
 
Ahoj, potřeboval bych u jednoho latte filteru, aby byl snadno konfigurovatelný v neon souboru:
filter:
	param1: foo
	param2: bar
Třídu extension mám nějak takto:
class FilterExtension extends CompilerExtension
{
	/** @var array */
	public $defaults = [
		'param1' => NULL, 'param2' => NULL,
	];
	public function loadConfiguration()
	{
		$config = $this->getConfig($this->defaults);
		if (empty($config['param1']) && empty($config['param2'])) {
			throw new FilterExtensionException('Please configure filter...');
		}
		$builder = $this->getContainerBuilder();
		$builder->addDefinition($this->prefix('filter'))
			->setClass('MyFilter', [$config['param1'], $config['param2']]);
	}
	public function beforeCompile()
	{
		// ...
	}
	public function afterCompile(Nette\PhpGenerator\ClassType $class)
	{
		// ...
	}
}
Jde tedy o to, že konstruktor filteru přebírá 2 povinné parametry, které jsou nastaveny právě přes extension (v metodě loadConfiguration). Následně bych potřeboval filter zaregistrovat, ael bohužel nevím, jak. Myslím, že je třeba udělat to v jedné z oněch dvou zbývajících metod, ale bohužel absolutně nerozumím, jak to udělat, nerozumím té syntaxi, pomocí kter se o dělá.

- romiix.org
 - Člen | 343
 
Malo by stačiť doplniť:
function beforeCompile()
{
	$builder = $this->getContainerBuilder();
	if ($builder->hasDefinition('nette.latteFactory')) {
		$builder->getDefinition('nette.latteFactory')
			->addSetup('addFilter', ['nazovFiltra', [$this->prefix('@filters'), 'nazovMetody']]);
	}
}