Vytvoření komponenty v komponentě (DI)

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

Ahoj, mam dve komponenty a potrebuju tu druhou vnorit do te prvni … pri pouziti tohoto kodu v prvni komponente:

/** @var  iCallToActionControlFactory @inject */
    public $iCallToActionControlFactory;

	public function createComponentCallToAction()
    {
        $control = $this->iCallToActionControlFactory->create();

        return $control;
    }

na radku, kde se vola metoda create() → Call to a member function create() on null

Nejaky tip ?

jiri.pudil
Nette Blogger | 1032
+
+2
-

Inject anotace afaik fungují jen v presenterech, pokud to explicitně nepovolíš. Předej si tu továrnu standardně v konstruktoru

jbezdicek
Člen | 13
+
0
-

jiri.pudil napsal(a):

Inject anotace afaik fungují jen v presenterech, pokud to explicitně nepovolíš. Předej si tu továrnu standardně v konstruktoru

Tak ty jsou ocividne povolene, tech interfacu tam je takhle injectnutych vic … bohuzel tenhle co sem pridal to dela jediny. Asi proto, ze ho jako jediny pouzivam v sablone te komponenty jako

{control callToAction}
CZechBoY
Člen | 3608
+
0
-

@jbezdicek Ne, inject je vypnutý v komponentách; v presenterech je zapnutý. Zkoušel jsi to předat přes ten konstruktor?

jbezdicek
Člen | 13
+
0
-

CZechBoY napsal(a):

@jbezdicek Ne, inject je vypnutý v komponentách; v presenterech je zapnutý. Zkoušel jsi to předat přes ten konstruktor?

Bohuzel nic extra :/

Argument 1 passed to App\FrontModule\CartPreviewControl::__construct() must be an instance of ICallToActionControlFactory, none given

Editoval jbezdicek (16. 1. 2017 11:47)

CZechBoY
Člen | 3608
+
0
-

A jak vytváříš ten CartPreviewControl? Máš na to taky továrnu?

akadlec
Člen | 1326
+
0
-

Máš tu továrnu registrovanou? Dle všecho se ti neregne, takže nejde autowirovat. A nebo máš u ní zakázán autowire.

jbezdicek
Člen | 13
+
0
-

CZechBoY napsal(a):

A jak vytváříš ten CartPreviewControl? Máš na to taky továrnu?

Ano, ten taky vytvarim pomoci tovarny…

akadlec napsal(a):

Máš tu továrnu registrovanou? Dle všecho se ti neregne, takže nejde autowirovat. A nebo máš u ní zakázán autowire.

Ano, je registrovana (respektive je config.neon pod controls:) … autowiring v configu ani najit nemuzu, kazdopadne je nejaky zpusob jak primo zjistit, jestli se zaregistrovala nebo jestli je problem jinde ?

jiri.pudil
Nette Blogger | 1032
+
0
-

je nejaky zpusob jak primo zjistit, jestli se zaregistrovala

V debugbaru bys měl mít DIC panel se seznamem služeb v kontejneru.

jbezdicek
Člen | 13
+
0
-

jiri.pudil napsal(a):

je nejaky zpusob jak primo zjistit, jestli se zaregistrovala

V debugbaru bys měl mít DIC panel se seznamem služeb v kontejneru.

Tak ted jsem z toho jelen .. vcera mi to hazelo tu chybu s tim, ze v konstruktoru predavam misto instance interfacu null, dneska refreshnu tu samou zalozku a jede to ? Vubec to nechapu, debug mode mam zaply, tak by se nemelo nic cachovat, ne ? :D

CZechBoY
Člen | 3608
+
0
-

Cachuje se to, ale občas se cache neinvaliduje bohužel. Je to potom hledání na hodiny :-) nebo prostě smázneš cache Nette.Configurator a počkáš než se přegeneruje DIC.

jbezdicek
Člen | 13
+
0
-

CZechBoY napsal(a):

Cachuje se to, ale občas se cache neinvaliduje bohužel. Je to potom hledání na hodiny :-) nebo prostě smázneš cache Nette.Configurator a počkáš než se přegeneruje DIC.

Pak to vysvetluj klientovi, ze si nad tim stravil nekolik hodin :-)

Kazdopadne vsem diky za rychle odpovedi! :-)