předání session do factories

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

Ahoj, narazil jsem na problém a nevím jestli je to řešitelné pomocí konfigurace. Mám službu, které předávám dvě komponenty. Tyto komponenty jsou vytvořené pomocí factories v konfigu. Problém je, že jim potřebuju předat službu session a nevim, jestli ji mám v okamžiku vytváření instancí komponent k dispozici.

Konkrétně:

common:
	factories:
		orderStep1:
			class: web123\Eshop\OrderStepCustomer
		orderStep2:
			class: web123\Eshop\OrderStepRecap
			arguments: [@session]
	services:
		orderSteps:
			class: web123\Eshop\StepManager
			arguments: [@session, [@orderStep1, @orderStep2]]

V konstruktoru OrderStepRecap očekávám service session, ale laďenka křičí, že nic nedostala.
Jedna otázka je, zda to zapisuji v konfiguráku správně,
druhá otázka je zda to může fungovat – pro vytvoření service orderSteps potřebuju komponenty, které potřebují service session…jenže v tomto okamžiku ještě není vytvořen container se službou session (nebo ano?).

Díky.

nanuqcz
Člen | 822
+
0
-

Ahoj, služby v DI Nette se vytvářejí lazy až když jsou potřeba, tzn většinou až za běhu aplikace (to už by session měla být vytvořená). Zkus ten config.neon přepsat do novější syntaxe (nevím, jestli je ta stará ještě podporovaná, ale podle všeho asi ne):

common:
        factories:
                orderStep1:
                        class: web123\Eshop\OrderStepCustomer
                orderStep2:
                        class: web123\Eshop\OrderStepRecap(@session)
        services:
                orderSteps:
                        class: web123\Eshop\StepManager(@session, [@orderStep1, @orderStep2])
Filip111
Člen | 244
+
0
-

Fungují oba dva zápisy – a díky lazy vytváření services to překvapivě funguje.
Problém byl nakonec jinde – komponenta OrderStepRecap vytváří ještě jednu komponentu s formulářem a tam jsem si session zapomněl předat.
(je zajímavý, že sám jsem do toho koukal asi 2 hodiny a až když se člověk zeptá, najde řešení).

Díky.

arron
Člen | 464
+
0
-

<OT>Právě proto se říká, že každý programátor by u sebe měl mít psa (popřípadě jiné preferované zvíře), se kterým bude všechno prvotně konzultovat. Cca 85% všech problémů (dotazů, záseků apod.) vyřešíš přesně ve chvíli, kdy se na ně někoho zeptáš:-)</OT>