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']]);
}
}