Pomocí addRoute() si nadefinujeme routy. Názvy jednotlivých částí routy vždy začínají dvojtečkou (např. :název). Metoda parseUrl() dostane URL, najde pro něj odpovídající routu a vrátí pole obsahující jednotlivé části routy tak, jak jsme si je pojmenovali.
$router = new Router; $router->addRoute('/:controller/:action/:id'); $router->addRoute('/:controller/:action'); $params1 = $router->parseUrl('/clanky/regiony'); // použije se druhá routa var_dump($params1); $params2 = $router->parseUrl('/clanky/upravit/123'); // použije se první routa var_dump($params2);Výsledek:
URL: /clanky/regiony array (size=2) 'controller' => string 'clanky' (length=6) 'action' => string 'regiony' (length=7) URL: /clanky/detail/123 array (size=3) 'controller' => string 'clanky' (length=6) 'action' => string 'detail' (length=6) 'id' => string '123' (length=3)
Pozn.: Metodě parseUrl budeme v aplikaci předávat $_GET['route'] (viz .htaccess), ale v příkladech jsou pro názornost použité napevno napsané URL. V dalších ukázkách také budu místo 'controller' => string 'clanky' (length=6) psát už jenom controller = clanky, je to přehlednější.
Některé části routy můžeme označit jako nepovinné - typický příklad použití jsou např. profily uživatelů, kdy adresa může i nemusí obsahovat ID uživatele. Nepovinné části mají před názvem otazník (např. :?id). Obě routy z předchozího příkladu tak můžeme nahradit jednou:
$router->addRoute('/:controller/:action/:?id); $params1 = $router->parseUrl('/clanky/regiony'); $params2 = $router->parseUrl('/clanky/upravit/123');Výsledek:
URL: /clanky/regiony controller = clanky action = regiony id = (prázdný řetězec) URL: /clanky/upravit/123 controller = clanky action = upravit id = 123
Při skládání URL - metoda url() - se zadává pole, kde klíče jsou názvy částí routy.
echo $router->url(array( 'controller' => 'clanky', 'action' => 'upravit', 'id' => 1234, )); // nepovinné části můžeme vynechat: echo $router->url(array( 'controller' => 'clanky', 'action' => 'regiony', ));Výsledek:
/clanky/upravit/1234 /clanky/regiony
NB: Hotová adresa není url-enkódovaná.
Bez ohledu na "pěkné URL" můžeme chtít některé údaje předávat jako query string (pár parametr + hodnota), např. k výstupní URL u výsledků nějakého vyhledávání přidat číslo stránky. Query string se zadává jako druhý parametr metody url(), může to být buď asociativní pole nebo už hotový řetězec s páry název=hodnota.
$router->addRoute('/:controller/:kategorie'); $urlParams = array( 'controller' => 'vyhledavani', 'kategorie' => 'knihy', ); echo $router->url($urlParams, array('stranka' => 3)); echo $router->url($urlParams, 'stranka=3');
Oba způsoby zápisu vytvoří stejnou URL. Číslo stránky najdeme jako obyčejně v $_GET['stranka']
/vyhledavani/knihy?stranka=3
Třetí a poslední parametr url() je kotva, abychom ji nemuseli ručně připojovat za hotovou adresu:
echo $router->url($urlParams, null, 'kotva'); echo $router->url($urlParams, 'stranka=3', 'kotva');Výsledek:
/vyhledavani/knihy#kotva /vyhledavani/knihy?stranka=3#kotva
Poslední aktualizace: 24. 6. 2012 15:54