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
+
0
-

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
+
+1
-

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']]);
	}
}
fary
Člen | 155
+
0
-

Ha, funguje to přesně tak, jak jsem potřeboval :-)

Díky moc