Problem s nechtenym automatickym redirectem routeru

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

Zdravim,

seznamuju se s nette a asi jsem spravne nepochopil, jak pracuje router. A ten se asi rozhodl, ze me bude zneprijemnovat zivot.. :)

mam takto router v bootstrapu

<?php
// Setup router
{
	$router = $application->getRouter();

	$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);

	$router[] = new Route('<presenter>/<action>[/<id [0-9]+>][/<sid [0-9]+>]', 'Sekce:default');

	$router[] = new Route('<presenter>/<action>', 'Homepage:default');
};
?>

a takto vypada render metody

<?php
  public function renderDefault()
    {
    // model s daty
    $model = new NavModel($this->context->getService('dibi'), $this->context->params->db);

    // vybrany menu item
    $this->template->nav = $model->GetById($this->getParam('id'));
    }
?>

mam administrovatelne sekce a vygenerovane odkazy v html maji takovyto tvar napriklad (kdyby jsem se mohl zbavit toho „default“, nevadilo by mi to):
www.domena.cz/sekce/default/6
www.domena.cz/sekce/default/5

kazda sekce muze mit jeden nebo vice zaznamu, pokud se neuvede sid, zobrazeji se vsechny, pokud uvede tak jen ten jeden

nejdrive jsem zobrazoval sekce pomoci /sekce/show/id, to slo korektne (asi), ale pak jsem zjistil, ze v defaultu stejne nic nemam, tak jsem to na nej prehodil

od te doby me z neznameho duvodu sekce s id5, ac ma v html zdrojaku spravny tvar, sama redirectuje (nevim co jineho nez redirect by to bylo) na www.domena.cz/sekce/5 a skonci to chybou 404, nicmene vsechny ostatni sekce, jako napriklad ta s id6 ale takto neredirectuje a ma adresu www.domena.cz/sekce/default/6

pokud router zmenim na:

<?php
$router[] = new Route('<presenter>/<action>/<id [0-9]+>[/<sid [0-9]+>]', 'Sekce:default');
?>

tak najednou se vsechny sekce zacnou zobrazovat jako
www.domena.cz/5
www.domena.cz/6
a chyba 404 kterou tu popisuju nenastane.

Chtel bych aby fungoval tvar www.domena.cz/sekce/6, a nekdy pozdeji ve tvaru www.domena.cz/seo-nazev-sekce a pri sid www.domena.cz/…azev-zaznamu

Nevim co s tim a uvital bych pomoc :)

EDIT: nejdriv jsem odkazy stavel jako

<?php
$this->link('Sekce:show', Array('id' => 5));
?>

a ted

<?php
$this->link('Sekce:', Array('id' => 5));
?>

Editoval Ascaria (1. 7. 2011 11:02)

castamir
Člen | 629
+
0
-

toho default se můžeš zbavit smazáním /<action>

<?php
...
$router[] = new Route('<presenter>[/<id [0-9]+>][/<sid [0-9]+>]', 'Sekce:default');
...
?>

že v defaultu nic nemáš je možná způsobeno tím

<?php
$this->template->nav = $model->GetById($this->getParam('id'));
?>

kde id bude nejspíš 0 nebo undefined – prostě to nenajde žádný odpovídající záznam

Další 2 odstavce (ohledně nějakého prohození a error 404) jsem moc nepobral, nicméně předpokládám, že to zkoušíš přímo na serveru a ne na lokálu. Zkus se mrknout do složky log, kde bys měl mít výpis laděnky k dané chybě (v názvu souboru je i datum)

Editoval castamir (1. 7. 2011 14:19)

Ascaria
Člen | 187
+
0
-

ze v defaultu nic nemam jsem myslel to ze renderDefault byla zbytecna a pouzivalo se jen renderShow, tak jsem to prehodil do defaultu :)

spis me so o to proc jednou to nette udelalo odkaz domena.cz/sekce/default/6 a nacetlo spravne obsah, a podruhy uplne ten samej link, akorad jiny id a najednou z toho bylo domena.cz/sekce/5 a hodilo to 404..

no skoda ze jsi smazal ten predchozi hezky vysvetlenej prispevek, podle nej by se dalo hezky navrhnout routu :)

castamir
Člen | 629
+
0
-

smazal jsem ho, protože byl chybný a nechtěl jsem tu šířit kravinu.

Každopádně změnou pravidel routování se ti změní i routy (logicky).

Změnil jsi nepovinný údaj „id“ na povinný, což mohlo vést k tomu, že daná routa nefungovala a použila se další v pořadí (Homepage:default)

Dál taky předpokládám, že máš renderDefault v BasePresenter a ne v SekcePresenter.

Doporučuju ten výpis jediného záznamu vrátíš do renderShow (v SekcePresenter) a do renderDefault (v témže presenteru) dáš výpis všech záznamů, případně to můžeš dát do templatu přímo viz ukázka CD-collection (DashboardPresenter a template default)

Editoval castamir (1. 7. 2011 14:32)