Registrace vlastní PresenterFactory v Nette 2.3
- harmim
- Člen | 26
Ahoj,
mám napsanou vlastní PresenterFactory, která dědí od
Nette\Application\PresenterFactory
. Problém je v tom, že nevím
jak ji mám zaregistrovat v Neonu.
Když to napíšu takhle, tak se nepředají argumenty do konstrukotru.
services:
nette.presenterFactory:
class: App\Application\PresenterFactory
Musím to dělat takhle
services:
nette.presenterFactory:
class: App\Application\PresenterFactory
arguments:
- Nette\Bridges\ApplicationDI\PresenterFactoryCallback(..., 0, NULL)
Neví někdo jak to napsat, abych tam nemusel takhle předávat ten
PresenterFactoryCallback
?
- Václav Pávek
- Backer | 100
taky by mě to zajímalo
harmim napsal(a):
Ahoj,
mám napsanou vlastní PresenterFactory, která dědí od
Nette\Application\PresenterFactory
. Problém je v tom, že nevím jak ji mám zaregistrovat v Neonu.Když to napíšu takhle, tak se nepředají argumenty do konstrukotru.
services: nette.presenterFactory: class: App\Application\PresenterFactory
Musím to dělat takhle
services: nette.presenterFactory: class: App\Application\PresenterFactory arguments: - Nette\Bridges\ApplicationDI\PresenterFactoryCallback(..., 0, NULL)
Neví někdo jak to napsat, abych tam nemusel takhle předávat ten
PresenterFactoryCallback
?
- Martk
- Člen | 661
Střílím totálně od boku, ale nešlo by udělat něco takového?
class Extension extends CompilerExtension {
public function beforeCompile() {
$definition = $this->getContainerBuilder()->getDefinition('application.presenterFactory');
$factory = $definition->getFactory();
$factory->setEntity('MyClass');
$definition->setFactory($factory);
}
}
EDIT:
Odzkoušeno a nakonec funguje tenhle kód (přepsání
PresenterFactoryCallback):
public function beforeCompile() {
$builder = $this->getContainerBuilder();
$def = $builder->getDefinition('application.presenterFactory');
/** @var Nette\DI\Statement $factory */
$factory = $def->getFactory()->arguments[0];
$factory->setEntity('PresenterFactory');
}
Editoval Antik (23. 2. 2016 22:03)
- harmim
- Člen | 26
@Antik To mi nefunguje, každopádně funguje tohle
public function beforeCompile()
{
$builder = $this->getContainerBuilder();
$presenterFactory = $builder->getDefinition('application.presenterFactory')->getFactory();
$presenterFactory->setEntity(\App\Application\PresenterFactory::class);
}
takže díky, zatím to nechám takhle.
Pořád to není ale není hezký, nejde to udělat nějak jednodušeji, jenom v neonu?
Editoval harmim (23. 2. 2016 16:38)
- Martk
- Člen | 661
@harmim Trošku jsem se v tom zamotal a přepsal jsem PresenterFactoryCallback místo PresenterFactory :). Přes config nelze