Společný SignPresenter pro frontent a backend?

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

Zdravím, učím se s Nette a programuji si v něm menší redakční systém. Mám použitou základní adresářovou strukturu + FrontModul a AdminModule.
Pro Front i admin budou společné uživatelské účty. SignPresenter bude tedy pro oba moduly v podstatě stejný. Zatím to mám tak, že mám dva presentery pro přihlašování, v každém modulu jeden. Nelíbí se mi ale že mám dva totožné soubory a hledám způsob, jak to vyřešit. Poradí někdo nějaké dobré řešení?

Nebo na to jdu úplně špatně a nemělo by to takhle být?

Editoval Andrasin (17. 6. 2012 22:46)

Elijen
Člen | 171
+
0
-

Já většinou dávám SignPresenter jen do FrontModule. Po přihlášení se může provést přesměrování už do libovolného modulu.

Andrasin
Člen | 29
+
0
-

No já bych to potřeboval tak aby se na sign presenter dalo dostat z obou modulů. Pro každý akorát načíst jinou šablonu.

vvoody
Člen | 910
+
0
-

Andrasin napsal(a):

No já bych to potřeboval tak aby se na sign presenter dalo dostat z obou modulů.

Co ti v tom brani? Namiesto Presenter:action budes link generovat ako Modul:Presenter:action.

Andrasin
Člen | 29
+
0
-

Ale mě nejde o to jak na něj vytvořit link, to samozřejmě vím. Ale o to, jak zajistit abych mohl do presenteru jak ve front modulu, respektive přes URL např. http://adresa.cz/sign/in a stejně tak z adminu http://adresa.cz/admin/sign/in. Jako by každý z modulů měl svůj vlastní SignPresenter, ale bude se využívat jen jeden soubor a 2 různé šablony.

Elijen
Člen | 171
+
0
-

Nejjednodušší bude asi jeden presenter podědit od druhého a nechat logiku jen v tom rodičovském. Tak můžeš mít jednoduše dvě šablony a logiku jen jednu.

Druhá a asi čistší možnost je mít jeden presenter a v něm dvě render (resp. action) metody, pro každý modul jednu.

vvoody
Člen | 910
+
0
-

Jeden podedit od druheho nieje moc sikovne. Ked bude treba zmenit logiku toho „rodicovskeho“ a zachvoat toho druheho nastane problem. Najlepsie by bolo aby oba dedili od tretieho abstraktneho presentru, nieco ako BaseSignPresenter. Poziadavku mat to pod jednym presenterom to nesplna, ale spolocna logika je takto na jednom mieste, co je podstatnejsie ako pocet suborov ;)

Druha moznost (rozlisit modul podla akcie) tiez nic moc :) Do ktoreho modulu by sa nakoniec taky presenter umiestnil? Co ak kazdy modul ma iny layout? Ako potom docielit povodnu url adresu? To by sme museli robit aspon jednu specialnu routu len kvoli jednej stranke.

Editoval vvoody (18. 6. 2012 2:21)

Elijen
Člen | 171
+
0
-

Jasně, první možnost jsem navrhoval jako nejrychlejší variantu. S tím, že není moc čístá, souhlasím.

To, kam se presenter umístí, je víceméně jedno. Já bych to osobně dal do FrontModule. To s tím layoutem nechápu. Každá šablona může mít přeci vlastní layout (metoda setLayout nebo makro layout). Co to má společného s URL?

vvoody
Člen | 910
+
0
-

Hej da sa nastavit layout ale pride mi to take nehezke :) mat pre kazdu akciu iny layout. Ak sa pre cely presenter zmeni layout to chapem, ale to je len vec nazoru.

Tie url: Andrasin spomenul url adresy

http://adresa.cz/sign/in
http://adresa.cz/admin/sign/in

ktore by sme s klasickou univerzalnou routou nedocielili v pripade, ze by obe prihlasovacie stranky boli v jednom presenteri. Ak postacia npr taketo url:

http://adresa.cz/sign/in
http://adresa.cz/sign/admin

tak potom neni problem.

Andrasin
Člen | 29
+
0
-

Tak jsem to nakonec vyřešil přenesením logiky z presenteru do komponenty, kterou můžu snadno použít v jakémkoli presenteru a načítat si k ní rozdílné šablony. Ale i tak díky za rady ;)