Špatné chování Routy při předávání parametrů se stejnou hodnotou
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Nightmare
- Člen | 3
Zdravím,
chci se s vámi podělit o pro mě záhadné chování routeru a zároveň
požádat o vysvětlení, pokud nějaké je.
Příklad:
Mám URL //domena.cz/clanky/clanky/stranka-1, kde dva
z předávaných parametrů (pre a cat) mají stejnou hodnotu.
Pokud provádím routování viz následující kód s tím, že je parametr cat nepovinný, server vyhodí Bad Request Exception
new Route("[<lang>/]<pre {$presentersPattern}>[/<cat {$categoriesPattern}>][/[<name>-]<id \d+>]", ...);
Pokud je cat parametr povinný, funguje správně (ale je povinný, což není žádané)
new Route("[<lang>/]<pre {$presentersPattern}>/<cat {$categoriesPattern}>[/[<name>-]<id \d+>]", ...);
- Nightmare
- Člen | 3
Na problém jsem přišel.
Není způsoben parametry se stejnou hodnotou, ale díky nim se projevil.
Způsoben je nesprávným fungováním Route::FILTER_STRICT při mém použití překladového slovníku u jazykových mutací.
$langsRouting = array(
Route::FILTER_TABLE => $languages->fetchPairs('code', 'id'),
Route::VALUE => $languages->where('default', true)->fetchField('id'),
Route::FILTER_STRICT => true
);
new Route("[<lang>/] ... ", array(
'lang' => $langsRouting,
...
));
V tomto případě je nutné do masky routy přidat omezení manuálně.
$langsPattern = implode('|', $languages->fetchPairs(null, 'code'));
$langsRouting = array(
Route::FILTER_TABLE => $languages->fetchPairs('code', 'id'),
Route::VALUE => $languages->where('default', true)->fetchField('id')
);
new Route("[<lang {$langsPattern}>/] ... ", array(
'lang' => $langsRouting,
...
));