Routovanie v CakePHP
V článku o routovaní v CakePHP si predstavíme mechanizmus práce s URL a ukážeme si niekoľko trikov, ako urobiť naše URL zaujímavé nie len pre programátora ale aj pre užívateľa.
URL ako rozhranie aplikácie
Controller je tá časť aplikácie, ktorá ako prvá prichádza do styku s požiadavkami, ktoré prichádzajú do našej aplikácie z vonkajšieho sveta. Najčastejším prípadom takéhoto požiadavku z vonkajšieho sveta je URL adresa. Ak teda budeme pristupovať k našej aplikácii prostredníctvom URL, potrebujeme nejaký mechanizmus, ktorý nám na základe tejto URL určí, že aplikácia „pozná“ na aké prvky aplikácie má smerovať dané požiadavky. Takýto mechanizmus sa nazýva routing.
V minulosti sa formátu URL adresy veľká pozornosť nevenovala. Často sme boli svedkami podobných URL ako môžeme vidieť na ukážke
http://www.example.com/index.php?action=list&template=comments&page=2&order=DESC
URL adresa v takomto tvare bola možno jednoduchá pre programátora, určite však nie pre užívateľa. V súčasnosti je trend iný a hlavne moderné frameworky sa snažia vytvárať a používať tzv. user friendly url. Príklad takejto adresy môžeme vidieť na ukážke
http://www.example.com/articles/mvc-model-view-controller-v-cakephp
Určite nám je jasné, že takáto adresa je oveľa viac čitateľnejšia a zrozumiteľnejšia nie len pre užívateľa. Ako sme už určite vytušili, CakePHP používa taktiež user friendly url. Poďme sa teda bližšie pozrieť, akým spôsobom pristupujeme v CakePHP k našej aplikácii prostredníctvom url

V našom prípade by url adresa pre zobrazenie článku v aplikácii napísanej v CakePHP mohla napríklad vypadať tak, ako môžeme vidieť na obrázku vyššie. Z url nám môže byť napríklad hneď jasné, že sa bude jednať o zobrazenie určitého článku. Obrázok taktiež demonštruje fungovanie routingu v samotnom CakePHP. Prvá časť adresy označená zelenou farbou nám určuje konkrétny controller v našej aplikácii, druhá časť označená červenou farbou nám určuje konkrétnu akciu v controlleri a posledná časť označená modrou farbou nám určuje parameter vkladaný do tejto akcie. Aby sme si vedeli túto situáciu predstaviť konkrétne, pozrime sa na nasledovný kód, ktorý by bol vykonaný pri použití url adresy z obrázku
class ArticlesController extends AppController{
var $name="Articles";
function show($id){
$this>set("article",$this>Article>findById($id));
}
}
Mechanizmus routingu by zabezpečil, že by sa zavolala metóda show triedy ArticlesController a zároveň by bol metóde predaný parameter s hodnotou 43.
Definovanie routovacích pravidiel
Základom práce s URL v CakePHP je súbor app/config/routes.php a trieda Router Definovaním vlastných routovacích pravidiel určujeme, akým spôsobom bude naša aplikácia odpovedať na obdržanú URL. Vlastné routovacie pravidlá definujeme prostredníctvom statickej metódy connect, ktorá prijíma 3 parametre
Router::connect
( $route,
$default = array(),
$params = array()
)
Prvým parametrom určujeme, ktorú časť a tvar URL adresy budeme spracovávať. URL je string oddelený znakom / alebo môže obsahovať aj znak *, ktorý značí ľubovoľný tvar URL. Druhý parameter je pole, v ktorom určuje, na akú časť aplikácie sa bude daná URL routovať a posledným parametrom je taktiež pole, ktorého kľúčmi môžu byť časť URL z prvého parametra alebo niektorý z preddefinovaných parametrov: :controller, :action, :plugin. Následne hodnotu týchto kľúčov definujeme pomocou regulárnych výrazov. Aby sme neostali len pri teórii, pozrime sa na konkrétne príklady použitia routovacích pravidiel
Router::connect(
'/articles',
array('controller' => 'articles', 'action' => 'index')
);
Ako môžeme vidieť vyššie, prvým parametrom sme určili, že url v tvare http://www.example.com/articles bude spracovávať controller ArticlesController a metóda index() tohto controllera.
Router::connect(
'/',
array('controller' => 'pages', 'action' => 'display', 'home')
);
Ako môžeme vidieť vyššie, tentokrát sme určili, že budeme routovať URL v tvare http://www.example.com alebo http://www.example.com/. Takýto tvar adresy bude spracovávať controller PagesController a jeho metóda display, ktorej navyše predáme parameter home. Programovo by volanie metódy vyzeralo takto: PagesController->display(„home“).
Router::connect(
'/:lang',
array('controller'=>'home','action'=>'index'),
array('lang' => '[a-z][a-z][a-z]?'));
Ako môžeme vidieť vyššie, prvým parametrom sme určili, že budeme routovať URL napr. v tvare http://www.example.com/eng Pri určovaní tvaru adresy sme použili kľúč :lang ktorého tvar sme následne definovali pomocou regulárneho výrazu v poslednom parametri. Čiže sme určili, že URL ktorú budeme routovať bude mať vždy tvar taký, že za / budú nasledovať tri znaky [a-z].
Routovanie s prefixom
CakePHP nám ponúka veľmi užitočnú vlastnosť súvisiacu s routovaním a to sú tzv. prefixy. Zrejme najpoužívanejším prefixom je prefix admin, kód pre takýto prefix by vypadal následovne a určili by sme ho tentokrát v súbore app/core.php
Configure::write('Routing.admin', 'admin');
Pri použití prefixu je žiadúce na vytváranie odkazov v rámci aplikácie používať html helper link ktorý nám automaticky dopĺňa tento prefix pred každý odkaz v prípade, že používame admin rozhranie
<?php echo $html->link("novy clanok", array('controller'=>'articles','action'=>'add')); ?>
Html helper link by nám v tomto prípade vygeneroval odkaz http://www.example.com/…articles/add čo je určite správne, i keď sme žiadny admin prefix explicitne nedefinovali.
Viac sa o použití admin prefixu pre vytvorenie administračného rozhrania môžete dočítať v článku Ako vytvoriť administračné rozhranie
Náš článok je týmto u konca. V článku sme si predstavili dôležitú časť CakePHP a tou je routovanie, ktorá je pre tvorbu profesionálnych aplikácií kľúčová.
Rád uvítam vaše nápady a pripomienky v diskusii pod článkom.
Súvisiace články
-
Kategórie
- Tipy a triky (28)
- Články (8)
- Fantom CMS (4)
- Zábava (2)
- Začíname s CakePHP (6)
-
Najčítanejšie články
-
Novinky
-
Seriál o CakePHP na www.debug.sk
15. 10. 2008
Od 7. októbra vychádza nový seriál o CakePHP na serveri zameranom na programovanie s názvom Debug.sk Autorom seriálu je autor tohto webu a kto by mal záujem, môžete daný seriál podporiť jeho prečítaním.
-
-
Nálepky
-
Nedávne komentáre
-
Rss kanály

Komentáre k článku
Nový komentár
Titulok: Dalsi chvala
Autor: darkcraft
Vytvorený: 06. 09. 2008 16:17
Tak jsme se dockali dalsiho clanku a je opet povedeny, stejne jako vsechny predchozi, takze znova chvalim a dekuji, jen tak dal. Obdivuji lidi, jako jste Vy, kteri si udelaji cas na to, aby se podelili o sve vedomosti a zkusenosti.
Titulok: Chybka
Autor: darkcraft
Vytvorený: 06. 09. 2008 16:28
Jenom bych upozornil, ze tu mate jeden link asi spatne, mate zde http://ims.rockretail.com/…in-rozhranie ale ma byt asi http://ims.rockretail.com/…in-rozhranie
Titulok: RE: chybka
Autor: Tibor
Vytvorený: 07. 09. 2008 11:40
Dakujem za pochvalu aj za upozornenie na chybu, uz som to v clanku opravil.