Automatické propojení komponenty s aktuálním presenterem
- baraja
- Nette Blogger | 29
Ahoj,
narazil jsem na pro mě zajímavé chování komponent, které sice chápu, ale stejně přemýšlím, jestli je chování opravdu očekávané a případně jak by šlo vylepšit.
Dejme tomu, že mám administraci, která se skládá z desítek komponent, které se dynamicky načítají a jsou uloženy uvnitř balíků, aby se s nimi dobře pracovalo. Komponenty jsou definovány jako služby DIC.
V BasePresenteru se stane nějaká magie vyhledání komponent pro aktuální stránku. Zkrátit by to šlo třeba na:
Uvnitř SeoControl
je implementace metody následující (hodně
zjednodušeno):
Otázky:
- To, že se ke komponentě automaticky nepřikládá aktuální presenter je záměr?
- Pokud ano, je volání
setParent()
na všech místech aplikace opravdu potřeba? - Co udělat možnost v neonu nastavit, aby se ke všem komponentám automaticky přidával parent aktuální presenter? Případně existuje něco takového? Obvykle se komponenty totiž vykreslují v presenterech a neustálé předávání parenta je otravné.
- To, že se má vložit aktuální presenter by o sobě mohla komponenta říct splněním nějakého rozhraní.
Pokud úprava automatického předávání aktuálního presenteru do komponenty (co je služba) dává smysl, klidně to implementuji a pošlu pull request.
Díky.
Editoval baraja (8. 8. 2019 16:07)
- baraja
- Nette Blogger | 29
@CZechBoY Ano, to popisuješ jen jinými slovy to, na co jsem se původně ptal.
Otázka ale byla, jestli by Nette mohlo automaticky řešit přidání relace na presenter (nebo aspoň v některých případech), protože pokud chci například přesměrovat uživatele, tak to není možné.
Díky.
- jiri.pudil
- Nette Blogger | 1034
Nette to řeší, ale jen pokud použiješ jeho komponentový systém, tj.
buďto ručním přidáním komponenty, jak píše @CZechBoY, anebo více
automaticky pomocí createComponent*()
. Velmi dobře o tom píše
dokumentace :)
- Marek Bartoš
- Nette Blogger | 1297
Dělej to přes createComponent, jak jsme se bavili a nebudeš mít problém
;)
A jak psal Felix, setParent je spíš internal. Měl bys připojovat komponentu
k rodiči, ne rodiče ke komponentě. Takže třeba
$this['seo'] = $control
, když už teda createComponent
nepoužiješ
Editoval Mabar (12. 8. 2019 13:24)