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ší…)