Přejmenování presenteru a přesměrování na nový

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

Ahoj,
měl bych takový dotaz. Mám adresu web.tld/aaa/123 a chtěl bych to změnit na web.tld/bbb/123. S tím, že aaa a bbb jsou názvy presenterů a 123 je slug. Zkoušel jsem to nějak takhle:

$router[] = new Route('<presenter aaa>[/<slug>]', array(
	'module' => 'Frontend',
	'presenter' => array(
		Route::VALUE => 'Homepage',
		Route::FILTER_IN => function ($presenter)
		{
			$return = $presenter;
			if (\Nette\Utils\Strings::lower($presenter) == 'aaa')
			{
				$return = 'bbb';
			}
			return $return;
		}
	),
	'action' => 'detail',
	'slug' => NULL
), Route::ONE_WAY);

Tohle funguje, ale jen bez slugu. Pokud vlezu na web.tld/aaa tak mě to hodí na web.tld/bbb. Pokud ale vlezu na web.tld/aaa/123, tak mě to přesměruje na web.tld/bbb. Přesměruje to na jinou routu a ten slug to jakoby zapomene. Je nějaká možnost jak vynutit předání toho slugu nebo jiny reseni, aby to fungovalo?

Díky

petr.pavel
Člen | 535
+
0
-

S tím přesměrováním ti neporadím. Zkus zakomentovat všechny routy před a po, abys měl jistotu, že skutečně pracuješ jen s touhle. Případně odstraň ONE_WAY, abys viděl, jestli routa vůbec sepne. Předpokládám, že ve skutečnosti nemáš presentery aaa a bbb, ale že se jmenují jinak.

Mimochodem, nebylo by jednodušší použít FILTER_TABLE místo FILTER_IN?

$router[] = new Route('<presenter aaa>[/<slug>]', array(
    'module' => 'Frontend',
    'presenter' => array(
        Route::VALUE => 'Homepage',
        Route::FILTER_TABLE => array(
            'aaa' => 'Homepage',
            'bbb' => 'Homepage',
            // The last value is the canonical one (used for link generation)
        ),
    ),
    'action' => 'detail',
    'slug' => NULL
), Route::ONE_WAY);