Hezke GET parametre v URL

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

Zdravim

Rozmyslam a bohuzial sa mi nedari, navrhnut routu, ktora by vsetky GET parametre generovala hezky:

teda

miesto:

<presenter>/<action>?param1=hodnota1&param2=hodnota2&param3=hodnota

na

<presenter>/<action>-param1_hodnota1-param2_hodnota2-param3_hodnota

nezavysle na pocte a nezvoch parametrov

Mal by niekto nejaky hint alebo navod ako na to?

David Matějka
Moderator | 6445
+
0
-

neznasilnuj obecnou Route, radsi si udelej vlastni router, inspirovat se muzes tady :)

jinak ty podtrzitka moc hezky nejsou, hezci by bylo treba

<presenter>/<action>/param1/hodnota1/param2/hodnota2
Jan Tvrdík
Nette guru | 2595
+
0
-

@matopeto: Varianta s query parametry je hezčí, ale jak myslíš no.

matopeto
Člen | 395
+
0
-

Suhlasim, ze get parametre su hezke, ale v projekte potrebujem konkretne generovat parametre aby neboli v gete a aby neboli cez lomitka (i ked je prakticky/implementacne asi jedno, ci je tam lomitko alebo pomlcka)

Skusim ten vlastny router, ale pokial uz niekto podobny mal (napr. pre tie lomitka) kludne sem s nim :)

Editoval matopeto (11. 9. 2013 18:09)

Jan Tvrdík
Nette guru | 2595
+
0
-

@matopeto: Takhle to jde (bez pořádného ošetření vstupů) zapsat ve 2.1-dev:

		new Route('<presenter=Editor>/<action=default>[-<params>]', [
			NULL => [
				Route::FILTER_IN => function ($params) {
					if (isset($params['params'])) {
						$pairs = explode('-', $params['params']);
						unset($params['params']);
						foreach ($pairs as $pair) {
							list($key, $value) = explode('_', $pair, 2);
							$params[$key] = urldecode($value);
						}
					}
					return $params;
				},
				Route::FILTER_OUT => function ($params) {
					$pairs = [];
					foreach ($params as $key => $value) {
						if ($key === 'action') continue;
						$pairs[] = urlencode($key) . '_' . urlencode($value);
						unset($params[$key]);
					}
					$params['params'] = implode('-', $pairs);
					return $params;
				}
			],
		]);
matopeto
Člen | 395
+
0
-

Vdaka vyskusam.