Public metoda pro zjištění cíle z Nettího tvaru

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

Ahoj,

už jsem při práci vícekrát narazil na nemožnost jedné věci. Když si napíšu nějakou vlastní metodu (je jedno kde a co dělá) a chci aby nějakým způsobem pracovala s nějakou action, docela by se hodila možnost dávat jí parametr v Nettím tvaru „Module:Presenter:Action“, problém je, že chybí metoda, která by tento tvar překládala do nějakého array('module' => 'Front', 'presenter' => 'Article', 'action' => 'Edit') (takhle jednoduše by to asi kvůli komponentám nešlo, ale smysl z toho snad je vidět).

Chtěl bych to využít na práci s anotacemi – vytvořit si makro, které by jako parametr dostalo cíl ve stejném tvatu jako {link …}, toto makro by si díky této mětodě, o kterou žádám zjistilo, kam odkaz vede a z anotací cílového presenteru a akce by si vyčetlo další informace a podle nich se zachovalo. Typické využití by bylo v anotaci uvádět práva, která pro danou action uživatel potřebuje (pokud je nemá, odkaz vůbec nevypsat), ale to není zdaleka jediná věc, kterou bych chtěl takto řešit. Ty ostatní věci jsou jen jako příklad nevhodné, neboť jsou výrazně „application specific“.

Funkcionalita pro parsování cíle je nyní schována v metodě Presenter::createRequest() a tedy ji nikdo zvenku nemůže použít. Neexistuje tedy způsob jak z Nettího tvaru cíle získat tvar tak, aby se s ním dalo nějak rozumně pracovat. Jednoduché hledání dvojtečky napadne asi každého, ale připadá mi to poněkud nedostatečné při pohledu na složitou logiku v Presenter::createRequest(). Navíc je to takové, že se jedna věc dělá na X místech Y způsoby a to je chyba už na první pohled.

Navíc by si někdo mohl chtít časem tuto parsovací metodu nějak modifikovat pro vlastní účely a mohl by si jí ve svém presenteru napsat sám jak chce.

Editoval jtousek (8. 10. 2010 0:24)