DibiConnection v services

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
baal
Člen | 34
+
0
-

Zdravím,

v Nette z 2011–08–24 jsem si vesele používal následující konstrukci:

	services:
		robotLoader:
			option:
				directory:
					- %appDir%
					- %libsDir%/dibi
			run: true
		dibi:
			class: \DibiConnection
			arguments:
					- %database%

Dneska jsem zkusil aktualizovat na Nette z 2011–10–12 a „Class ‚\DibiConnection‘ has not been found.“

RobotLoader určitě funguje, když zrušíme Dibi service a zavolám DibiConnection přímo v PHP po načtění configu, tak funguje. Chybka v Nette nebo správné chování?

kucix
Člen | 33
+
0
-

Ahoj,

zkus tohle:

<?php
...
$configurator->container->getService('robotLoader'); // forces RobotLoader to be registered
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
...
?>
arron
Člen | 464
+
0
-

kucix wrote:

Ahoj,

zkus tohle:…

To už je ale workaround…

Setkal jsem se s tímhle už asi před týdnem, ale neměl jsem čas psát bug-report. Jsem přesvědčený, že je to chyba přímo v Nette. Při zpracovávání služeb z configu se totiž kontroluje existence dané třídy, ale ještě v tu chvíli není nastartovaný robotloader, takže třída není nalezena. Když ji odstraníš z configu, tak se pak robotloader normálně nastartuje a všechno funguje zdánlivě normálně. Ale v době zpracovávání služeb z configu ještě robotloader neběží.

Netuším přesně co se změnilo (podrobně jsem to nezkoumal), ale souvisí to z přepracováním DI v Nette.

edit: teď koukám, že tam toho do DI hodně přibylo…lehce jsem to projel očima a nezdá se, že by to mohlo být opravené…

Editoval arron (25. 10. 2011 20:59)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ano, je to bug, již nahlášený, s workaroundem přišel Honza Tvrdík.