Choď na navigáciu
Nálepky: routing url CakePHP

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 ArticlesContro­ller 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/rou­tes.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 ArticlesContro­ller 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.

Povedz o článku aj ostatným - www.pridej.cz

Hodnotenie článku: 56%
Počet hodnotení: 39

zlýdobrý

Komentáre k článku

Nový komentár

  1. 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.

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

  3. 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.