Registrácia služby iba ak služba daného typu nie je definovaná
- romiix.org
- Člen | 343
Mám modul aplikácie ktorý rieši komplexne celú časť webu. Má to byť samostatný balík inštalovaný cez composer. Cieľom je, aby bol univerzálne použiteľný na rôznych weboch. Jeho súčasti musia byť v prípade potreby nahraditeľné špeciálnou implementáciu pre daný projekt.
Modul je registrovaný cez Extension. Chcem spraviť extension tak, aby boli
služby automaticky registrované, iba v prípade, ak služba nie je
definovaná v config.neon
.
Žiaľ v loadConfiguration
ešte nie sú zaregistrované služby z
config.neon
a v beforeCompile
je na registráciu už
neskoro – chýbajú pre injectovanie do presenterov.
class UserModuleExtension extends CompilerExtension
{
public function loadConfiguration()
{
$builder = $this->getContainerBuilder();
if ($sluzbaTohotoTypuNieJeNastavena)
$builder->addDefinition($this->prefix('registrationFormFactory'))
->setImplement('RM\UserModule\Application\UI\Control\RegistrationForm\IRegistrationFormFactory');
}
}
Je to možné? Ako to riešite?
Vďaka!
- David Matějka
- Moderator | 6445
Ja preferuju, ze to registruju vzdy a pak pripadne upravim v neonu nastaveni:
services:
myExtension.registrationFormFactory: {implement: FooFormFactory}
pokud bys ale chtel resit podminecnou definici, tak v loadConfiguration muze byt prilis brzo. Asi bych na to sel tak, ze v loadConfiguration bych ji vzdy registroval a pak v beforeCompile zkontroloval, zda nepribyla nova definice a pokud ano, tak puvodni odebrat. Od 2.3 muzes ziskat v beforeCompile vsechny sluzby daneho typu metodou findByType
- romiix.org
- Člen | 343
Super, toto riešenie s nazvaním služby mi nejak nenapadlo:)
Podmienečné registrovanie je je v loadConfiguration
priskoro a
v beforeCompile
v tomto prípade neskoro.
Ak si registrovanú službu injectujem v nejakom presentri, tak musí byť
medzi loadConfiguration
a beforeCompile
dostupná
presne jedna služba daného rozhrania. A to neviem docieliť.
Pre 100 % pohodlné vyriešenie tohoto problému v Nette chýba ešte
nejaká metóda medzi loadConfiguration
a
beforeCompile
.