Pokud se rozhodnete změnit URL některých stránek, Router to usnadní i vašim návštěvníkům. Stačí určit (flagem Route::REDIR), které routy se mají přesměrovávat a kam. Přesměrování proběhne automaticky a prohlížeči se posílá odpovídající hlavička (301 Moved Permanently).
Cílové URL se zadávají metodě addRoute() jako 4. parametr, a to dvěma způsoby - jako pole parametrů, nebo callback:
Jednodušší způsob, vhodný hlavně pro jednotlivé stránky, je zadat pole parametrů, ze kterého se cílová URL vytvoří. Pole má mít stejný formát jako to, které předáváte metodě url().
$cil = array( 'controller' => 'novy', 'action' => Router::COPY_OLD_VALUE, ); // tato se přesměrovává $router->addRoute('/:controller<stary>/:action', array(), Route::REDIR, $cil); // a podle této se složí cílová URL $router->addRoute('/:controller/:action'); $router->parseUrl('/stary/nejakaAkce'); // přesměruje na: /novy/nejakaAkce
Pokud jako hodnotu některého parametru pro cílové URL zadáte konstantu Router::COPY_OLD_VALUE, použije se pro tento parametr hodnota ze staré URL (názvy parametrů se musí shodovat).
Na složitější určení cílové URL použijte callback. Příklad: na webu univerzity jsou profily lektorů (dostupné přes /vyucujici/[jménoPedagoga]) a vedení fakulty chce přidat "aliasy" URL u vdaných/ženatých. Callback funkce dostane jako jediný argument pole parametrů z URL a vrací pole parametrů pro metodu url. V příkladu je použita anonymní funkce (PHP 5.3+), ale stejně tak lze zadat jakýkoli jiný platný callback včetně metod volaných přes __call (callback se validuje funkcí is_callable).
$callback = function($params) { $stastneSvoji = array( 'Novakova-Klara' => 'Susilova-Novakova-Klara', 'Petrova-Marketa' => 'Vladigerova-Marketa', ); $cil = array( 'controller' => Router::COPY_OLD_VALUE, 'action' => Router::COPY_OLD_VALUE); if (isset($stastneSvoji[$route['jmeno']])) { $cil['jmeno'] = $stastneSvoji[$route['jmeno']]; } else { $cil['jmeno'] = $params['jmeno']; } return $cil; }; $router->addRoute('/:controller<vyucujici>/:action', array(), Route::REDIR, $callback);
NB: Callback musí vždy vracet pole parametrů, z něhož lze vygenerovat URL. V situaci, kdy překládáme adresy přes databázi pedagogů a někteří už na škole neučí (= nejsou už v databázi, ale někde na netu stále ještě existují odkazy na jejich staré profily), musí callback vracet parametry pro jinou platnou URL - např. přehled pedagogů. V opačném případě metoda parseUrl vyhodí výjimku.
Poslední aktualizace: 24. 6. 2012 15:54