Signál přes extensionMethod() + koncept formulářů

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

Zdravím,

vyvíjím poměrně složitou administrační aplikaci a chtěl bych se zeptat na názor odborníků. Každý formulář v aplikaci má vlastní třídu děděnou z abstraktního BaseForm, která obsahuje metody pro vytvoření prvků a validačních pravidel. Dnes jsem si umanul, že by bylo fajn, aby formulář jakožto znovupoužitelná komponenta (koncept tohoto tu už někde zazněl) obsahoval i pro něj specifické akce/metody, v případě presenterů tedy signály.

Vezmu konkrétní příklad: formulář siteLoginForm obsahuje metodu handleLogout, přetížením attached volám abstraktní setupExtensions, který přes addMethod přidá presenteru extension methodu uvedenou v parametru. To by ale bylo příliš jednoduché. Mé úsilí totiž padá na Reflection, která extension metody u většiny getovátek nezjistí. Musel bych tedy upravit kód Presenteru, aby bral v podmínkách i možnost existence těchto metod (přes getExtensionMethod($name)) a nebo přímo celý Nette\Reflection\ClassReflection a to už se mi opravdu přestává líbit.

Prosím o zhodnocení konceptu, nebo pokud mě někdo nakopnete lepším směrem, budu jedině rád :)

edit: tak mě napadá, že bude lepší zabalit formulář do komponenty, čímž všechny problémy odpadnou – proč mě to nenapadlo před odesláním tohoto dotazu?

Editoval Dragon Jake (4. 6. 2010 15:33)

Filip Procházka
Moderator | 4668
+
0
-

zkus se podívat na tohle, nevím jestli tě chápu úplně přesně,

https://forum.nette.org/…a-komponenta

ale pokud bys měl formulář vždy v takovéto komponentě, mohl bys jí dát signály a do templaty odkazy na handlery apod :)

Dragon Jake
Člen | 20
+
0
-

HosipLan napsal(a):

zkus se podívat na tohle, nevím jestli tě chápu úplně přesně,

https://forum.nette.org/…a-komponenta

ale pokud bys měl formulář vždy v takovéto komponentě, mohl bys jí dát signály a do templaty odkazy na handlery apod :)

Přesně tím jsem se inspiroval poté, co mě osvítila myšlenka komponenty, vlastně jsem si editem sám odpověděl. Díky za reakci :)