<?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>Punkt 16 &#187; Router</title>
	<atom:link href="http://www.punkt16.de/tag/router/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.punkt16.de</link>
	<description>Entwicklung &#38; Mehr von Punkt18.com</description>
	<lastBuildDate>Thu, 10 Nov 2011 10:59:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Zend Framework: Eigene Router</title>
		<link>http://www.punkt16.de/2009/09/zend-framework-eigene-router/</link>
		<comments>http://www.punkt16.de/2009/09/zend-framework-eigene-router/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 12:40:59 +0000</pubDate>
		<dc:creator>Florian Palme</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Router]]></category>

		<guid isPermaLink="false">http://www.punkt16.de/?p=98</guid>
		<description><![CDATA[Wie erstelle ich eigene URLs um zum Beispiel eine Variable übergeben zu können?  ]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Wie erstelle ich eigene URLs um zum Beispiel eine Variable übergeben zu können?</p>
<p><span id="more-98"></span></p>
<p>&nbsp;</p>
<p>Um eigene Router zu implementieren, öffnen wir als erstes die index.php aus dem &#8220;public&#8221;-Ordner.<br />
Hier schreiben wir nun, nach dem wir die Application erstellt, die Bootstrap geladen und ausgeführt haben, folgende Zeile um einen neuen Rewrite-Router zu erstellen:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$router</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Controller_Router_Rewrite<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p>Als nächstes möchten wir einen eigenen Router anlegen. Wir nehmen nun mal an, dass wir einen NachrichtenController haben, sowie eine lesenAction. An diese Action möchten wir nun über die URL die ID mitgeben. Als Name für den Router verwenden wir &#8220;nachrichtlesen&#8221;:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$router</span><span class="sy0">-&gt;</span><span class="me1">addRoute</span><span class="br0">&#40;</span><span class="st_h">'nachrichtlesen'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Hier würde Zend noch meckern, da er eine Klasse des Typs Zend_Controller_Router_Route erwartet. In diesen Klassen-Aufruf schreiben wir, wie die URL aussehen soll, dass eine ID übergeben werden soll und welcher Controller / welche Action verwendet werden soll:


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$router</span><span class="sy0">-&gt;</span><span class="me1">addRoute</span><span class="br0">&#40;</span>
	<span class="st_h">'nachrichtlesen'</span><span class="sy0">,</span>
	<span class="kw2">new</span> Zend_Controller_Router_Route<span class="br0">&#40;</span><span class="st_h">'nachrichten/lesen/:id'</span><span class="sy0">,</span>
									<span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'controller'</span> <span class="sy0">=&gt;</span> <span class="st_h">'nachrichten'</span><span class="sy0">,</span>
										  <span class="st_h">'action'</span> <span class="sy0">=&gt;</span> <span class="st_h">'lesen'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p><b>Zur Erklärung:</b><br />
&#8220;nachrichten/lesen/&#8221; ist die URL, wie sie später aussehen wird (http://beispiel.de/nachrichten/lesen/).<br />
:id ist ein Parameter, der Übergeben wird.<br />
Das Array enthält die Bestimmung, welcher Controller (nachrichten) / welche Action (lesen) verwendet werden soll.</p>
<p>&nbsp;</p>
<p>Jetzt noch die Routen an die Application übergeben:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$ctrl</span> <span class="sy0">=</span> Zend_Controller_Front<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$ctrl</span><span class="sy0">-&gt;</span><span class="me1">setRouter</span><span class="br0">&#40;</span><span class="re0">$router</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p>In einer unsere Views erstellen wir nun ganz einfach eine URL mithilfe des URL-Helpers, welcher auf diese Route zugreift:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="st_h">'3'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st_h">'nachrichtlesen'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Dies ergibt folgende Ausgabe:


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="html"><pre class="de1">http://beispiel.de/nachrichten/lesen/3</pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p>Im NachrichtenController &#038; der lesenAction können wir dies nun wie gewohnt über die Request-Methode verarbeiten:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$id</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getParam</span><span class="br0">&#40;</span><span class="st_h">'id'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<div class="simple_likebuttons_container_small">
      <div class="simple_likebuttons_googleplus">
        <g:plusone size="medium" count="false" href="http://www.punkt16.de/2009/09/zend-framework-eigene-router/"></g:plusone>
      </div>
    
      <div class="simple_likebuttons_twitter simple_likebuttons_twitter_s">
        <a href="https://twitter.com/share" class="twitter-share-button" data-count="none" data-url="http://www.punkt16.de/2009/09/zend-framework-eigene-router/" data-lang="de">Tweet</a>
      </div>
    
      <div class="simple_likebuttons_facebook">
        <div id="fb-root"></div>
        <script>(function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) {return;}
          js = d.createElement(s); js.id = id;
          js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, "script", "facebook-jssdk"));</script>
        <div class="fb-like" data-href="http://www.punkt16.de/2009/09/zend-framework-eigene-router/" data-send="false" data-layout="button_count" data-show-faces="false" data-width="90"></div>
      </div>
    </div>]]></content:encoded>
			<wfw:commentRss>http://www.punkt16.de/2009/09/zend-framework-eigene-router/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

