Hezke GET parametre v URL
- matopeto
- Člen | 395
Zdravim
Rozmyslam a bohuzial sa mi nedari, navrhnut routu, ktora by vsetky GET parametre generovala hezky:
teda
miesto:
<presenter>/<action>?param1=hodnota1¶m2=hodnota2¶m3=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
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
- matopeto
- Člen | 395
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
@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;
}
],
]);