pouziti inject v SignInFormFactory nebo jne

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

Ahoj, chtěl bych se zeptat jestli jde nějak použít inject v SignInFormFactory. Například v BasePresenter mám. Tak jestli by to šlo podobně i ve factory, abych to nemusel pořád vypisovat přes konstruktor

/** @var \Kdyby\Translation\Translator @inject */
    public $translator;
CZechBoY
Člen | 3608
+
0
-

Jde to zapnout, ale potřebuješ určitě ve finální továrně použít tuhle zkratku?
Inject se používá právě v base* třídách, kde potom přepisuješ konstruktor.
Konstruktor je nejčistší řešení – přijde někdo novej, kdo neviděl nikdy Nette a nebude mít vůbec ponětí co je @inject anotace.

jarda256
Člen | 130
+
0
-

@CZechBoY No udělal jsem si BaseFormFactory.php Tak jsem tam chtěl ten inject, abych v každé form factory (kterých mam celkem hodně) nemusel furt propouštet FormFactory a Kdyby/Translation/Translator do parent constructoru

Matey
Člen | 142
+
0
-

https://doc.nette.org/…dependencies#…
Povolíš to takto:

services:
	-
		class: App\Forms\BaseFormFactory
		inject: yes

Editoval Matey (5. 1. 2017 1:00)

Šaman
Člen | 2667
+
+2
-

Přesně na takovou věc jako volitelný translator vznikl v Nette Decorator
Technicky se pak jedná o method injection, což je čistější, než property injection (tedy anotace @inject).

Šaman
Člen | 2667
+
0
-

Matey napsal(a):

https://doc.nette.org/…dependencies#…
Povolíš to takto:

services:
	-
		class: App\Forms\BaseFormFactory
		inject: yes

Jestli se v tomhle poslední dobou nic nezměnilo, tak to nebude fungovat (což je dobře).
V tomto případě vytváříš instanci BaseFormFactory, což nechceš. Chceš instancovat její potomky.

Takže by bylo potřeba pro každého potomka natavit to inject: yes.

Tento problém právě řeší rozšíření decorator, které všechny objekty typu BaseFormFactory ještě dodatečně upraví. Třeba jim nastaví translator.

CZechBoY
Člen | 3608
+
0
-

Taky používám DI Decorator na settery závislostí base* tříd.

Tomáš Votruba
Moderator | 1114
+
+1
-

Decorator se hodí i v pár dalších případech – tady k němu najdeš mini návod.