Routa jde jinam než by měla
- pjoter
- Člen | 118
Zdravím,
potřeboval bych poradit s routama.
Definice:
<?php
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'Homepage',
'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('<kraj>/[<okres>/]', array(
'presenter' => 'Vyber',
'action' => 'default',
'okres' => NULL,
));
$router[] = new Route('<kraj>/[<okres>/]<advert_type>/[<advert_subtype>/]', array(
'presenter' => 'Vypis',
'action' => 'default',
'okres' => NULL,
'advert_subtype' => NULL
));
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
RoutingDebugger::enable();
// Step 5: Run the application!
$application->run();
?>
Problém je v případě, kdy volám presenter Vypis a parametry
okres
a advert_subtype
jsou NULL. Router mě
přesměruje na presenter Vyber i když by správně měl na Vypis. Co
s tím ?
Editoval pjoter (6. 8. 2010 15:24)
- Panda
- Člen | 569
Router není zázračný, neumí při mapování z adresy na presenter odhadnout, co je jaký parametr. Pokud mu dáš například adresu
/ustecky-kraj/banner/
tak nepozná, zda je banner
parametr okres
ze
druhé routy, nebo advert_type
ze třetí. Proto vybírá první
routu, na kterou maska pasuje. A to je ta druhá, která směřuje na presenter
Vyber
.
Řešením by bylo například prefixovat celou routu, nebo nastavit parametr
okres
jako povinný. On obecně nepovinný parametr uprostřed
routy bude dělat neplechu, v PHP si taky nemůžeš s pořadím parametrů
dělat co chceš a funkce typu
function ($arg1, $arg2 = NULL, $arg3) { ... }
nemá moc význam, protože stejně vždycky budeš muset zadávat všechny parametry.
- pjoter
- Člen | 118
Aha, no s prefixama to vali ale url nemaji takovy tvar jaky jsem chtel :(, rad bych dosahl
/kraj/okres/typ/podtyp
/kraj/typ/podtyp
/kraj/okres/typ
/kraj/typ
/kraj/okres
/kraj
To by nejak neslo napadlo me treba spojit to do jednoho presenteru a udelat ten vypis vyber jako akce, ale asi bych dosel opet k tomu ze dve adresy budou mit stejny tvar a to kraj/typ a kraj/okres. Fakt to nejde jinak nez s tema prefixama ? (dik)
- Ondrej
- Člen | 110
pjoter napsal(a):
Aha, no s prefixama to vali ale url nemaji takovy tvar jaky jsem chtel :(, rad bych dosahl
/kraj/okres/typ/podtyp
/kraj/typ/podtyp
/kraj/okres/typ
/kraj/typ
/kraj/okres
/kraj
jedine vlastni iteligentni router, ktery by vedel jake parametry mohou nabyvat jakych hodnot a podle toho by mohl lepe urcit o jaky presenter/akci jde.