Znovupoužitelné formuláře, autowiring a komponenty

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

Když jsem procházel fórum a hledal, jak na znovupoužitelné formuláře, našel jsem dost názorů, jak na ně.
Většinou všichni skončili u @DavidGrudl a jeho příspěvku . Osobně jsem to zatím řešil pomocí komponent s autowiringem . Tedy každý formulář je v samostatné komponentě. Žádné továrny pro formuláře jako takové jsem nepoužil.

Víceméně tohle řeší Venne\Forms, ale nevím jestli je to optimální řešení.

Chci především odstínit formuláře a jejich zpracování od presenterů, ať jsou čisté, co to jen jde (to řeší momentálně autowiring). Potom bych rád měl metody pro zpracování formuláře hned u něj, ale zároveň se může stát, že bude potřeba jeden formulář zpracovávat více možnými způsoby na více místech (tohle už musím řešit duplicitami).

Napadlo mě to řešit následujícím způsobem podobným Venne\Forms:
Továrna na formulář s autowiringem ← Komponenta s autowiringem ← Presenter

Není to zbytečně složité? Co používáte vy, aby byl ve formulářích a komponentách?

Šaman
Člen | 2668
+
0
-

Mě se nejvíc osvědčila továrna na samostatný formulář, pro který pak mohu buď vytvořit komponentu, nebo vytvářet přímo v presenteru. Používám obojí, podle toho, jestli se bude vykreslovat všude stejně, nebo bude na několika místech vykreslený odlišně. Případně jestli po jeho zpracování budu přesměrovávat ne jedno místo, nebo pokaždé jinam.

Formulář si řeší základní zpracování, v komponentě/presenteru se ještě přidá flashMessage a přesměrování – v PHP >=5.4 to lze i pomocí anonymní funkce, viz odkaz.


Takže stejně, jak to navrhuješ ty, jen ne vždy si vytvářím i komponentu. Rozdíl, mezi komponentou a samostatným formem je jen v tom, že komponenta nastavuje i tu flashMessage, přesměrování a šablonu. Takže komponentu ano, pokud ji celou použiju víc, než na jediném místě.

Editoval Šaman (3. 9. 2014 13:44)

David Matějka
Moderator | 6445
+
+3
-

Vetsinu formularu mam jako komponenty, zkousel jsem vsechno mozny – od dedeni ui\form, pres tovarnu na form, ale tohle se mi osvedcilo nejvic.

Jednou z hlavnich nevyhod tovarny na form (jak ukazuje @Šaman) je to, ze neumi drzet stav.

Formulare jako komponenty jsou mnohem flexibilnejsi, mohou si sami resit vykreslovani, muzes je nakonfigurovat. Coz by resilo i tvuj problem, kdy je jeden formular potreba zpracovat jinym zpusobem – pridas si do komponenty property, treba „processor“ (kde bude napr. callback, nebo trida implementujici urcity interface), setter a v presenteru vzdy nastavis ten spravny processor.


@Šaman

Rozdíl, mezi komponentou a samostatným formem je jen v tom, že komponenta nastavuje i tu flashMessage, přesměrování a šablon

to nemusi byt pravda, ja flashMessage i redirect nastavuji v presenteru

Editoval matej21 (3. 9. 2014 14:21)

Filip Procházka
Moderator | 4668
+
0
-

V kombinaci s custom callbacky jsou formuláře v UI\Control tou nejlepší možností co můžeš použít.