Formuláře – komponenta v komponentě

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

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
+
0
-

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
+
0
-

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)