Jak na: <presenter>/<action>?<id>
- Eda
- Backer | 220
Ahoj.
Přepisuju starou aplikaci do Nette a chtěl bych se vyhnout změnám v URL. Naneštěstí odkazy v jedné části webu jsou tohoto tvaru:
http://web.cz/aktuality/aktualita?154
Kde 154 je ID aktuality, což je také nově parametr akce presenteru. Zkoušel jsem to naroubovat na Nette routování, ale tohle mi nefunguje (= tato routa se neuplatní a využije se routa obecnější):
/aktuality/aktualita?<id>
A nic jiného mne nenapadá.
Netušíte prosím někdo, jak tu routu správně zapsat?
Díky.
- David Matějka
- Moderator | 6445
napis si vlastni router ;)
Jinak je to v query (a tedy i v parametrech) jako pole
154 => ""
takze by slo napsat globalni filtr a tam ten parametr najit a upravit…
Editoval matej21 (26. 1. 2015 21:47)
- Eda
- Backer | 220
Díky, ty globální filtry jsou supr.
Ale stejně mi to asi nepomůže, protože když to naimplementuju takto:
$router[] = new Route($baseUrl.'[<locale cs|sk>/]aktuality/aktualita', [
'presenter' => 'News',
'action' => 'detail',
'locale' => 'cs',
null => [
Route::FILTER_IN => function (array $params) {
foreach ($params as $key => $value) {
if (is_numeric($key) && $value == '') {
$params['id'] = $key;
unset($params[$key]);
break;
}
}
return $params;
},
Route::FILTER_OUT => function (array $params) {
bdump($params);
if (isset($params['id'])) {
$params[$params['id']] = '';
unset($params['id']);
}
return $params;
},
],
]);
Tak URL:
/aktuality/aktualita?456
to sice přeloží na správný presenter, akci i ID, ale v opačném směru,
pokud odkaz generuju, dostávám k tomu ještě na konci rovnítko (nj, jasný,
je to jakoby název parametru…):
/aktuality/aktualita?456=
Nemáš i na tohle nějaký trik? :-)
Tak mě napadá. Teoreticky vlastně můžu ten vlastní router využít jen
k řešení toho rovnítka na konci. Přepsat jen constructUrl
a
pokud bude požadovaná akce a presenter, oříznout z konce výsledku volání
parenta rovnítko. Hm, to by šlo, jdu to testnout. Tak díky za
námět :-)
(Ale je to teda dost dirty řešení. Asi fakt časem napíšu celý vlastní router. Bude to i rychlejší…)