Databazova routa plus staticke routy

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

ahojte, v aplikácii mam statické stránky(presentery) a potom stránky uložené v db.
snažím sa nejak spojazdniť routovanie, aby keď sa jedna o stránku, o ktorej existuje záznam v db sa použil presenter Stranky, inak sa použije iný presenter.

Vytvoril som si aj vlastný router, skopírovaním a úpravou Route ktorý komunikuje s db, ak nájde záznam nastaví presenter na Stranky, inak pokračuje funkcia match ďalej ako u Route.

Aj to funguje, ale problém je, že pri vstupnej url napr domena.sk/slug ma to presmeruje na domena.sk/stranky/>id=1. Ide mi o to, aby adresa ostala rovnaká, len sa zmenil presenter.

Request nastavujem takto

<?php
$params['id'] = $stranka->id;

return new PresenterRequest(
	'Stranky',
        $httpRequest->getMethod(),
        $params,
        $httpRequest->getPost(),
        $httpRequest->getFiles(),
        array(PresenterRequest::SECURED => $httpRequest->isSecured())
        );
?>

Tipnem si, že to ide vyriešiť nejak úplne jednoducho, ale asi som natvrdlý keďže mi žiadne riešenie nenapadá.
Díky za pomoc.

Filip Procházka
Moderator | 4668
+
0
-

Rozhodně nám ukaž ještě definici routeru, protože tam bude určitě hlavní problém. Definicí myslím jeho nastavení v app/bootstrap.php.

$router[] = new MyCMSRoute("...

Editoval HosipLan (5. 3. 2011 17:25)

bazo
Člen | 620
+
0
-

medzitym som s tym troska laboroval, definicia routy

<?php
$router[] = $frontRouter = new MultiRouter('Front');
$frontRouter[] = new MyRoute('<slug>', 'Stranky:default');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Domov:default');
?>

router je tu https://gist.github.com/856495

niekde tam prichadza k redirectu, ktory potom matchne tu druhu routu

bazo
Člen | 620
+
0
-

ak nastavim presenteru $autoCanonicalize = false, tak uz k presmerovaniu neprichadza.

bojovyletoun
Člen | 667
+
0
-

vždyť construct url nevrací nic. Nejspíš máš defaultně zapnuto Presenter::$autoCanalize, takže při každém požadavku se volá Nette\Application\Presenter::canonicalize(). To dál volá createRequest → volá router. No a jelikož první routa (myRoute) nic nevytvoří, tak se dál pokračuje druhou.

Ale podle mě není potřeba MyRoute – stačí použít třeba Route a filtrovací tabulky.

bazo
Člen | 620
+
0
-

constructUrl som doplnil, funguje ale iba s vypnutym Presenter::$autoCanonicalize.

ako by vyzerali tie filtrovacie tabulky?