Nestatická továrnička v CompilerExtension
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Pan Dobrman
- Člen | 45
Dobrý den, lze použít nestatickou továrničku při tvorbě neon rozšíření? Instanci třídy už mám jako službu vytvořenou, jen potřebuji zavolat její metodu, abych ji předal do jiné služby.
Staticky volám takto:
$builder->addDefinition($this->prefix('service'))
->setFactory('Class::factory');
- Filip Procházka
- Moderator | 4668
Předně, to ::
je jenom takový „obecný zápis“ (abys
nemusel přemýšlet, jestli psát ->
, nebo ::
).
Asi to mate, ale není tím vždy myšleno jen volání statické metody.
$builder->addDefinition($this->prefix('serviceFactory'))
->setClass('MyClass');
$builder->addDefinition($this->prefix('service'))
->setFactory($this->prefix('@serviceFactory') . '::factory');
- Pan Dobrman
- Člen | 45
Ještě by mě zajímalo, jak by se dal vytvořit takovýto kód.
services:
myClass:
class: MyClass
setup:
- setSomething(@self::doSomething(foo))
Děkuji předem.
- Filip Procházka
- Moderator | 4668
Cca takto
$builder->addDefinition($this->prefix('myClass'))
->setClass('MyClass')
->addSetup('setSomething', array(
new Nette\DI\Statement('@self::doSomething', array('foo'))
));