Routování signálů s parametrem

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

Ahoj borci,
potřeboval bych poradit s nastavením routy. Mám presenter s mapou a filtruju v ní objekty pomocí signálů (např. handleKraj($district)). Nevím jak nastavit, aby se mi routovalo

localhost/test/mista/?district=Praha&do=kraj

na

localhost/test/mista/kraj/Praha

podobně

localhost/test/mista/?state=cz&do=stat

na

localhost/test/mista/stat/cz

Implementaci předělávat nebudu, potřebuju jen udělat ty routy. Když udělám více rout

<?php
$router[] = new NRoute('mista/<do>/<state>', 'mista:default');

$router[] = new NRoute('mista/<do>/<district>', 'mista:default');

$router[] = new NRoute('mista/<do>/<city>', 'mista:default');
?>

Tak se to hádá a pořád to bere tu první, když zkouším udělat vše jednou routou, což by podle mě mělo jít

<?php
$router[] = new NRoute('mista/<do>/<?>', 'mista:default');
?>

tak se vrátí

localhost/test/mista/kategorie/?category=1

a já potřebuju

localhost/test/mista/kategorie/1

už fakt nevím…

Editoval suxik (17. 3. 2012 13:57)

duke
Člen | 650
+
0
-

Co třeba takto:

<?php
$router[] = new NRoute('mista/<do stat>/<state>', 'mista:default');
$router[] = new NRoute('mista/<do kraj>/<district>', 'mista:default');
$router[] = new NRoute('mista/<do mesto>/<city>', 'mista:default');
?>
suxik
Člen | 62
+
0
-

aha, to mi nedošlo, díky moc :) a je nějaký řešení, jak to napsat do jedné routy?

Tomáš Votruba
Moderator | 1114
+
0
-

Zkus nastavit jako nepovinné parametry:

<?php
$router[] = new NRoute('mista/[<do stat>/<state>/][<do kraj>/<district>/][<do mesto>/<city>/]', 'mista:default');
?>
duke
Člen | 650
+
0
-

@Schmutzka Obávám se, že takovéto konstrukce nefungují.

@suxik Do jedné routy to dostaneš při použití výchozí routovací třídy jen tak, že sjednotíš název cílového parametru, např. takto:

$router[] = new NRoute('mista/<do stat|kraj|mesto>/<target>', 'mista:default');

Pokud potřebuješ zachovat rozlišení názvu onoho parametru, pak si budeš muset napsat vlastní routovací třídu.

suxik
Člen | 62
+
0
-

aha, už to chápu. Díky pánové!