Konfigurace presenterů v config.neon způsobí autowiring do továren komponent

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

Když si takto nakonfiguruji presenter:

services:
	myPresenter:
		class: MyPresenter(@doctrine.dao(MyEntity))

a v DI mám registrované továrny na komponenty, DI se mi presenter snaží pomocí autowiringu předat do konstruktoru komponent.

Když zakážu u presenteru autowired: no, presenterFactory potom nevytváří presenter přes DI (metoda $context->findByType vrací jen služby s autorired: yes)

Co s tím? Myslím si, že správným řešením by bylo uvádět u presenterů autowired: no a metoda $context->findByType by měla vracet všechny služby.

PS: Vím, že můžu překrýt konstruktor komponent a vynechat $parent a $name, ale chci se vyhnout nutnosti používat nějaký svůj BaseControl.
PS2: Vím, že u všech továren komponent můžu do konstruktoru uvést NULL a tím předávání vypnout. Hledám nějaké čisté řešení.

Filip Procházka
Moderator | 4668
+
0
-

Vím, že u všech továren komponent můžu do konstruktoru uvést NULL a tím předávání vypnout. Hledám nějaké čisté řešení.

To je to čistě řešení. V každé komponentě resetovat konstruktor aby nepřijímal $parent a $name, popřípadě dědit od nějakého base který už ho bude mít resetovaný.

David Matějka
Moderator | 6445
+
0
-

uz mam na to pres mesic otevrenej pull request

pepakriz
Člen | 246
+
0
-

matej21: blacklist imho nic nevyřeší, presenterFactory potom presenter z DIC nevytáhne.

David Matějka
Moderator | 6445
+
0
-

@pepakriz: vyresi – neni mozne autowirovat tridy jako UI\Presenter, ComponentModel*.. ale konkretni presenter jo

Tomáš Votruba
Moderator | 1114
+
0
-

Filip Procházka napsal(a):

Vím, že u všech továren komponent můžu do konstruktoru uvést NULL a tím předávání vypnout. Hledám nějaké čisté řešení.

To je to čistě řešení. V každé komponentě resetovat konstruktor aby nepřijímal $parent a $name, popřípadě dědit od nějakého base který už ho bude mít resetovaný.

(Fční řešení):

Jak toto řešení vypadá v praxi? Mám BaseControl, kde mám:

public function __construct()
{
	parent::__construct(NULL, NULL);
}

Editoval Tomáš Votruba (5. 6. 2014 22:36)

David Matějka
Moderator | 6445
+
0
-

tohle fungovat musi, nefailuje jina komponenta, ktera nededi od tveho BaseControlu? nebo nemas v nejake konkretni prepsany konstruktor se signaturou UI\Controlu?

ukaz exception

Editoval matej21 (5. 6. 2014 22:08)

Tomáš Votruba
Moderator | 1114
+
0
-

Edit: @matej21: Máš pravdu, měl jsem tam typo a už to jede. Díky.

P.S.: Jak to vypadá s tím PR?

Editoval Tomáš Votruba (5. 6. 2014 22:35)