Pomoc s různorodým routováním

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

Dobrý den,
jsem v Nette úplný začátečník a potřeboval bych poradit s routováním.

Potřebuji toto:
/home PagePresenter:default (parametr home)
/home/upravit PagePresenter:edit (parametr home)
/funkce PagePresenter:default (parametr funkce)
/novinky PostPresenter:default (parametr novinky)
/novinky/pridat PostPresenter:add (parametr novinky)
/novinky/odstranit/1 PostPresenter:deleter (parametry novinky,1)
/ukoly PostPresenter:default (ukoly)
/prihlaseni SignPresenter:default
/registrace SignPresenter:register
/odhlaseni SignPresenter:logout

Toto byl pouze zlomek ze všech možných URL adres.

Napadli mne dvě možnosti:

  1. Vytvořit si pro každou akci zvláštní presenter kromě PagePresenteru, který pouze vypisuje text.

/novinky NovinkyPresenter
/ukoly UkolyPresenter
/prihlaseni PrihlaseniPresenter
/home PagePresenter
/funkce PagePresenter

  1. Ukládat si presentery a akce do databáze.

Nejde mi o kód, spíš by mne zajímal Váš názor na způsob, jakým to udělat.
U první možnosti je, dle mého názoru problém, že projekt bude obsahovat spoustu tříd, kde se bude hodně kódu opakovat. Ale na druhou stranu bude projekt asi přehlednější (nemusím kód rozdělovat na větve podle parametru).
U druhé možnosti zase nevím, jak by měl vypadat návrh databáze a asi by bylo programování routy trochu složitější.

Předem moc děkuji za radu.

Pavel Kravčík
Člen | 1196
+
0
-

A nefungoval by univerzální parametr + nějaké persistentní?

A každý presenter by si ho překládal jinak? Něco jako $param a každý presenter si ho zpracuje zvlášť. Udržíš si tím jednu routu a to specifické nastavení bude vždy v konkrétním místě – kam podle mě patří.

Druhé parametry můžeš řešit takto:
/** @persistent */
public $druhyParametr;

public function startup($param)
{
	$this->home = $param;
}

A routa pak bude stejná jako ta defaultní -> jen vyhodíš [id] a dáš tam [param].
svanda777
Člen | 14
+
0
-

Obávám se, že jsem moc nepochopil, jak jsi to myslel. Mohl bys to prosím trochu rozvést?

Mysteria
Člen | 797
+
0
-

Myslel to tak, že si máš ty parametry pojmenovat univerzálně, tzn. třeba param1, param2 a někde bude param1 ID článku, jinde to třeba bude název uživatele a podobně. :)

svanda777
Člen | 14
+
0
-

Ale já spíše potřebuji vědět, jak zvolit presenter. Jestli je lepší varianta mít presenter uložený v databázi a nebo mít pro každou funkcionalitu vlastní presenter i za cenu, že by se kód opakoval.

Pavel Kravčík
Člen | 1196
+
0
-

Tak můžeš ty presentery dědit. :) Ty se stejnou funkčností budou mít stejného abstraktního předka a nikde nebudeš mít ten kód vícekrát. Případně můžeš asi použít traity (tam si nejsem jistý).

svanda777
Člen | 14
+
0
-

Ještě mi došlo, že potřebuji autorizaci – u každé „stránky“ potřebuji určit, kdo k ní má přístup. Už jsem se tedy rozhodl, že většina stránek bude mít vlastní presenter, kromě stránek, které zobrazují pouze text – ty budou používát PagePresenter. A samozřejmě bych rád používal hezké URL.

Mohl by mi někdo poradit, jakým způsobem udělat routování a databázovou strukturu?