Routovani – zmena presenteru ve filtru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jiří Nápravník
- Člen | 710
Zdravím,
potřebuji poradit, chci docilit nasledneho routovani, aby smerovalo
/profil/1/galerie → Profile:gallery(id)
/profil/1/pratele → List:friends(id)
chci to v jedne route a nastavit ten presenter ve filtru. Vymyslel jsem tohle:
$frontList[] = new Route('/profil/<id [0-9]+>/<action>', [
'presenter' => [
Route::VALUE => 'Profile'
],
'action' => [
Route::FILTER_TABLE => [
'pratele' => 'friends',
'galerie' => 'gallery',
],
Route::FILTER_STRICT => TRUE,
],
NULL => [
Route::FILTER_IN => function($params){
if($params['action'] ==='friends')){
$params['presenter'] = 'List';
}
return $params;
}
]
]);
když zadám adresu, tak to funguje jak má. ALe pokud chci vytvořit adresu přes {link}, tak se mi vytvoří jen v případě galerie. V případě pratel nikoli. Tipuji, ze je treba i FILTER_OUT ale nejak nevim, jak jej napsat.
- Jan Tvrdík
- Nette guru | 2595
Tipuješ správně, chybí ti tam FILTER_OUT
. Nicméně celé to
máš postavené blbě. Lépe třeba takto:
$frontList[] = new Route('/profil/<id [0-9]+>/<slug>', [
NULL => [
Route::FILTER_IN => function ($params) {
if ($params['slug'] === 'galerie') {
$params['presenter'] = 'Profile';
$params['action'] = 'gallery';
} elseif ($params['slug'] === 'pratele') {
$params['presenter'] = 'List';
$params['action'] = 'friends';
} else {
return NULL;
}
unset($params['slug']);
return $params;
},
Route::FILTER_OUT => function ($params) {
if ($params['presenter'] === 'Profile' && $params['action'] === 'gallery') {
$params['slug'] = 'galerie';
} elseif ($params['presenter'] === 'List' && $params['action'] === 'friends') {
$params['slug'] = 'pratele';
} else {
return NULL;
}
unset($params['presenter'], $params['action']);
return $params;
}
]
]);