Formuláře – komponenta v komponentě
- tany
- Člen | 31
Ahoj,
přemýšlím, jak vyřešit formuláře tak, aby jsem nemusel oddělovat
callbacky od formu. Navíc nechci mít nacpané handlery formulářů
v presenteru.
Tak mě napadlo zapouzdřit form do další komponenty. Získat potřebné informace mohu v attached metodě komponenty (např. persistentní parametry, a zbytek requestu – nevýhoda je nutnost mít vše jako public property).
Nelíbí se mi ale porušování DI, potřebné service (connection ..) si musím sám v této metodě tahat z contextu. Za další se mi nelíbí workaround, kdy flashmessage a redirect si řeší presnter signal handlerem, který ručně volám z té komponenty pomocí signalReceived(signal).
Proto by jsem rád věděl, jak toto řešíte vy, lepší řešení by se hodilo.
- David Matějka
- Moderator | 6445
porusovani DI – nikoliv. definuj si zavislosti v konstruktoru a vytvor si pro komponentu DI tovarnicku
redirect a flash message: tohle neresim v te komponente, ale mam tam udalost onSuccess, na kterou navaze presenter callback.
- tany
- Člen | 31
No nakonec jsem to udělal jinak, šel jsem tou o něco horší cestou – serviceLocator.
Zjistil jsem, že většina komponent chce pořád to samé (moduleConfigurator, modely), tak jsem si vytvořil další container a upravil jsem konstruktor komponent tak, aby jako třetí parametr vyžadovaly instanci Nette\DI\Container.
Kontejner je lazy, tak nějak nevidím problém v overheadu. (Pokud ten kontejner nebude obsahovat desítky položek)
Sice to nen čisté řešení, ale pro mě jako lamku asi nejjednoduší.
P.S.: Sry za cz/en mixování, dělá mi to občas problémy.
Editoval tany (24. 5. 2013 19:49)