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
+
0
-

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
+
+2
-

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;
		}
	]
]);
Jiří Nápravník
Člen | 710
+
0
-

Super, diky funguje