Získávání závislostí ve formFactory

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

Ahojte, mám problém se získáváním závislosti v jedné mojí továrničce. Zkoušel jsem to dvěma způsoby (viz níže)

final class SignFormFactory extends BaseFormFactory
{
    /** @var User */
    protected $user;

    /** @var  UserFacade */
    protected $userFacade;

    public function setUser(User $user, UserFacade $userFacade)
    {
        $this->userFacade = $userFacade;
        $this->user = $user;
    }

    public function injectUser(User $user, UserFacade $userFacade)
    {
        $this->userFacade = $userFacade;
        $this->user = $user;
    }

Mohli byste mi prosím říct, proč mi ani setter, ani inject* závislost nepředá?

Oli
Člen | 1215
+
+1
-

Jsem na mobilu, takze ve zkratce: použij constructor :)

Michal Florian
Člen | 2
+
0
-

Oli napsal(a):

Jsem na mobilu, takze ve zkratce: použij constructor :)

No konstruktorem předávám taky nějaké závislosti. Ještě přída dědí od BaseFormFactory, tak jsem v tom konstruktoru nechtěl přenášet 5 věcí.

CZechBoY
Člen | 3608
+
+3
-

Tak spíš do tý BaseFactory si předej závislosti setterem/injekcí. Pomůže ti rozšíření decorator
https://www.tomasvotruba.cz/…re-in-nette/

David Grudl
Nette Core | 8227
+
+4
-

Dědit od BaseFormFactory zavání. Místo dědičnosti si ji předávej jako závislost v SignFormFactory a máš po problémech.

Šaman
Člen | 2663
+
+1
-

Konkrétně třeba takhle.
Je tam FormFactory, což je asi tvoje BaseFormFactory, která řeší třeba nastavení rendereru.
Ale konkrétní XxxFormFactory od ní nedědí, jen si ji vyžádají a nechají si od ní vytvořit základní kostru formuláře, kterou dál zpracovávají.
(Těch událostí beforeSave apod. si nevšímej, nesouvisí se závislostmi.)