Routování pomocí databáze
- finalman
- Člen | 1
Ahoj,
předem upozorňuji, že jsem v Nette relativně nový, tak se omlouvám, pokud můj dotaz bude bezpředmětný.
Pokusím se nastínit problém. Rád bych si na Nette postavil vlastní
jednoduchý CMS, ale zasekl jsem se u routování.
V db mám tabulku, dejme tomu, ‚pages‘, která obsahuje
‚název_stránky‘, …, a také obsahuje ‚název_presenteru‘, který se
bude o tuto stránku starat.
Podstata je taková, že bych chtěl, aby se v adrese nezobrazoval přímo
název presenteru (to lze u routy vyřešit filtrem), ale zároveň bych
chtěl, aby se, například, pro články a aktuality použil stejný presenter
i přesto, že v adrese bude /aktuality/aktualita_o_sleve nebo
/clanky/clanek_o_necem a toto filtrem vyřešit nelze (podle mě).
Pokoušel jsem se předělat třídu Route, aby pracovala s databází, to je bez problému. Zjistil jsem si i název stránky (aktuality, články, …) a na základě toho jsem si získal z DB, jaký presenter pro tuto stránku použít, ale jakmile na konci metody match vrátím výsledek:
return new Application\Request(
$presenter,
$httpRequest->getMethod(),
$params,
$httpRequest->getPost(),
$httpRequest->getFiles(),
array(Application\Request::SECURED => $httpRequest->isSecured())
);
Tak mě to přesměruje na adresu podle názvu presenteru, který jsem našel v DB (například stranka_presenter/clanek_o_necem).
Byl bych vděčný, kdyby mi někdo pomohl s tímto problémem, nebo kdyby mi poradil jiný postup, jak toto řešit.
Díky
- llsm
- Člen | 121
Nestaci ti pouzit Route::FILTER_TABLE
? Udelat si vlastni tridu,
ktera se o routu (tj. vsechny routy, ktere jdou pres DB) bude starat a nahrat
si do routy vsechny presentery, ktere jsou v databazi?
Snazit se prespsat chovani routeru by podle mne nemelo byt potreba. Jinak doporucuji k routam video z jedne z poslednich sobot.