<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IMS Blog - blog o modernom programovaní od Tibor Piňo &#187; url</title>
	<atom:link href="http://ims.rockretail.com/tag/url/feed/" rel="self" type="application/rss+xml" />
	<link>http://ims.rockretail.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 18 Feb 2010 10:11:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Routovanie v CakePHP</title>
		<link>http://ims.rockretail.com/2008/09/03/routovanie-v-cakephp/</link>
		<comments>http://ims.rockretail.com/2008/09/03/routovanie-v-cakephp/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 14:52:09 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.<span id="more-49"></span></p>
<h2>URL ako rozhranie aplikácie</h2>
<p>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 <strong>routing</strong>.</p>
<p>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</p>
<pre><code>http://www.example.com/index.php?action=list&amp;template=comments&amp;page=2&amp;order=DESC</code></pre>
<p>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. <strong>user friendly url</strong>. Príklad takejto adresy môžeme vidieť na ukážke</p>
<pre><code>http://www.example.com/articles/mvc-model-view-controller-v-cakephp</code></pre>
<p>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ž <strong>user friendly url</strong>. Poďme sa teda bližšie pozrieť, akým spôsobom pristupujeme v CakePHP k našej aplikácii prostredníctvom url</p>
<div><img src="/files/images/cakephp-url.png" alt="" /></div>
<p>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</p>
<pre><code>class ArticlesController extends AppController{
     var $name="Articles";
     function show($id){
           $this­&gt;set("article",$this­&gt;Article­&gt;findById($id));

     }
}</code></pre>
<p>Mechanizmus routingu by zabezpečil, že by sa zavolala metóda <em>show</em> triedy <em>ArticlesContro­ller</em> a zároveň by bol metóde predaný parameter s hodnotou <em>43</em>.</p>
<h2>Definovanie routovacích pravidiel</h2>
<p>Základom práce s URL v CakePHP je súbor <em>app/config/rou­tes.php</em> a trieda <a href="http://api.cakephp.org/class_router.html">Router</a> 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 <em>connect</em>, ktorá prijíma 3 parametre</p>
<pre><code>Router::connect
        (       $route,
                $default = array(),
                $params = array()
        )</code></pre>
<p>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 <em>*</em>, 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</p>
<pre><code>Router::connect(
        '/articles',
        array('controller' =&gt; 'articles', 'action' =&gt; 'index')
);</code></pre>
<p>Ako môžeme vidieť vyššie, prvým parametrom sme určili, že url v tvare <a href="http://www.example.com/articles">http://www.example.com/articles</a> bude spracovávať controller <em>ArticlesContro­ller</em> a metóda <em>index()</em> tohto controllera.</p>
<pre><code>Router::connect(
        '/',
        array('controller' =&gt; 'pages', 'action' =&gt; 'display', 'home')
);</code></pre>
<p>Ako môžeme vidieť vyššie, tentokrát sme určili, že budeme routovať URL v tvare <a href="http://www.example.com">http://www.example.com</a> alebo <a href="http://www.example.com/">http://www.example.com/</a>. Takýto tvar adresy bude spracovávať controller <em>PagesController</em> a jeho metóda <em>display</em>, ktorej navyše predáme parameter <em>home</em>. Programovo by volanie metódy vyzeralo takto: PagesController-&gt;display(„home“).</p>
<pre><code>Router::connect(
        '/:lang',
        array('controller'=&gt;'home','action'=&gt;'index'),
        array('lang' =&gt; '[a-z][a-z][a-z]?'));</code></pre>
<p>Ako môžeme vidieť vyššie, prvým parametrom sme určili, že budeme routovať URL napr. v tvare <a href="http://www.example.com/eng">http://www.example.com/eng</a> Pri určovaní tvaru adresy sme použili kľúč <em>:lang</em> 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].</p>
<h2>Routovanie s prefixom</h2>
<p>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 <em>admin</em>, kód pre takýto prefix by vypadal následovne a určili by sme ho tentokrát v súbore <em>app/core.php</em></p>
<pre><code>Configure::write('Routing.admin', 'admin');</code></pre>
<p>Pri použití prefixu je žiadúce na vytváranie odkazov v rámci aplikácie používať html helper <a href="http://api.cakephp.org/class_html_helper.html#71ff7f331b08318bc867a4d9057b7d9f">link</a> ktorý nám automaticky dopĺňa tento prefix pred každý odkaz v prípade, že používame admin rozhranie</p>
<pre><code>&lt;?php echo $html-&gt;link("novy clanok", array('controller'=&gt;'articles','action'=&gt;'add')); ?&gt;</code></pre>
<p>Html helper link by nám v tomto prípade vygeneroval odkaz <a href="http://www.example.com/admin/articles/add">http://www.example.com/…articles/add</a> čo je určite správne, i keď sme žiadny admin prefix explicitne nedefinovali.</p>
<p>Viac sa o použití admin prefixu pre vytvorenie administračného rozhrania môžete dočítať v článku <a href="/articles/2008/02/27/ako-vytvorit-admin-rozhranie">Ako vytvoriť administračné rozhranie</a></p>
<p>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á.</p>
<p>Rád uvítam vaše nápady a pripomienky v diskusii pod článkom.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2008/09/03/routovanie-v-cakephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
