| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 17175 -->
- <!-- Reviewed: no -->
- <sect3 id="zend.controller.router.routes.standard">
- <title>Zend_Controller_Router_Route</title>
- <para>
- <classname>Zend_Controller_Router_Route</classname> est la route par défaut intégrée
- dans le routeur de réécriture (RewriteRouter). Ce routeur combine les deux avantages que
- sont la simplicité d'utilisation et la flexibilité. Chaque route est définie par une
- correspondance d'<acronym>URL</acronym>, statique ou dynamique, et des valeurs par défaut
- peuvent être fournies, de même que des valeurs obligatoires.
- </para>
- <para>
- Imaginons une application ayant besoin de posséder une page en décrivant l'auteur.
- Nous voulons que lorsque le navigateur pointe vers
- <filename>http://domaine.fr/auteur/martel</filename>, la page d'informations en question
- puisse apparaître, au sujet de "martel". La route pour une telle <acronym>URL</acronym>
- pourrait être :
- </para>
- <programlisting language="php"><![CDATA[
- $route = new Zend_Controller_Router_Route(
- 'auteur/:username',
- array(
- 'controller' => 'profile',
- 'action' => 'userinfo'
- )
- );
- $router->addRoute('user', $route);
- ]]></programlisting>
- <para>
- Le premier paramètre du constructeur de <classname>Zend_Controller_Router_Route</classname>
- est la définition de la route à analyser avec l'<acronym>URL</acronym>. Les définitions
- des routes sont des parties statiques et dynamiques, séparées par des slashs ("/").
- Les parties statiques sont juste du texte brut : <emphasis>auteur</emphasis>. Les
- dynamiques, appelées variables, sont repérées grâce à un caractère
- deux-points (:) devant la variable : <emphasis>:username</emphasis>.
- </para>
- <note>
- <title>Utilisation des caractères</title>
- <para>
- Pour identifier une variable dans un schéma de routage (après le deux-points), en
- théorie n'importe quel caractère fait l'affaire (sauf le slash "/"). Cependant il est
- conseillé de n'utiliser que des caractères que <acronym>PHP</acronym> comprend comme
- étant des noms de variables valides. Les implémentations futures de ce comportement
- peuvent changer, altérant ainsi votre code.
- </para>
- </note>
- <para>
- Cette route exemple devrait être utilisée lorsque le navigateur pointe vers
- <filename>http://domaine.fr/auteur/martel</filename>, et dans un tel cas, tous les
- paramètres de la requête seront injectés dans l'objet
- <classname>Zend_Controller_Request</classname> et
- seront accessibles à travers votre <classname>ProfileController</classname>. Les variables
- retournées par cet exemple peuvent être représentées par le tableau suivant :
- </para>
- <programlisting language="php"><![CDATA[
- $values = array(
- 'username' => 'martel',
- 'controller' => 'profile',
- 'action' => 'userinfo'
- );
- ]]></programlisting>
- <para>
- Plus tard, <classname>Zend_Controller_Dispatcher_Standard</classname> va distribuer
- vers la méthode <methodname>userinfoAction()</methodname> de
- <classname>ProfileController</classname> (dans le module par défaut) selon ces valeurs.
- A cet endroit, il sera possible d'accéder à toutes les variables de la requête grâce à
- <methodname>Zend_Controller_Action::_getParam()</methodname> ou
- <methodname>Zend_Controller_Request::getParam()</methodname> :
- </para>
- <programlisting language="php"><![CDATA[
- public function userinfoAction()
- {
- $request = $this->getRequest();
- $username = $request->getParam('username');
- $username = $this->_getParam('username');
- }
- ]]></programlisting>
- <para>
- La définition des routes peut contenir un ou plusieurs caractères spéciaux - des
- jokers - représentés par le symbole '*'. Il est utilisé pour collecter des paramètres.
- L'exemple suivant représente plus ou moins le comportement par défaut de la route
- "Module" :
- </para>
- <programlisting language="php"><![CDATA[
- $route = new Zend_Controller_Router_Route(
- ':module/:controller/:action/*',
- array('module' => 'default')
- );
- $router->addRoute('default', $route);
- ]]></programlisting>
- <sect4 id="zend.controller.router.routes.standard.variable-defaults">
- <title>Variables par défaut</title>
- <para>
- Chaque variable dynamique dans la définition des routes peut avoir une valeur par
- défaut. C'est à cela que sert le second paramètre du constructeur de
- <classname>Zend_Controller_Router_Route</classname>. Il s'agit d'un tableau avec comme
- clés les noms des variables, et comme valeurs, leurs valeurs par défaut :
- </para>
- <programlisting language="php"><![CDATA[
- $route = new Zend_Controller_Router_Route(
- 'archive/:annee',
- array('annee' => 2006)
- );
- $router->addRoute('archive', $route);
- ]]></programlisting>
- <para>
- L'exemple ci-dessus établira une correspondance avec les <acronym>URL</acronym> comme
- <filename>http://domaine.fr/archive/2005</filename> et
- <filename>http://exemple.fr/archive</filename>. Dans ce dernier cas, la variable de
- l'année (<emphasis>annee</emphasis>) aura la valeur 2006.
- </para>
- <para>
- L'exemple ci-dessus injecte ainsi un paramètre représentant une année
- (<emphasis>annee</emphasis>). Si aucune information de contrôleur ou d'actions n'est
- présente, alors ceux par défaut seront utilisés (ils sont définis dans
- <classname>Zend_Controller_Dispatcher_Abstract</classname>). Pour que l'exemple soit
- plus intuitif, spécifions des paires contrôleur et action par défaut dans notre
- route :
- </para>
- <programlisting language="php"><![CDATA[
- $route = new Zend_Controller_Router_Route(
- 'archive/:annee',
- array(
- 'annee' => 2006,
- 'controller' => 'archive',
- 'action' => 'show'
- )
- );
- $router->addRoute('archive', $route);
- ]]></programlisting>
- <para>
- Cette route va alors donner une distribution vers la méthode
- <methodname>showAction()</methodname> de <classname>ArchiveController</classname>.
- </para>
- </sect4>
- <sect4 id="zend.controller.router.routes.standard.variable-requirements">
- <title>Obligations et contraintes des variables</title>
- <para>
- Vous pouvez ajouter un troisième paramètre au constructeur de
- <classname>Zend_Controller_Router_Route</classname> pour spécifier une variable
- obligatoire. Ceci s'effectue au moyen d'expressions régulières :
- </para>
- <programlisting language="php"><![CDATA[
- $route = new Zend_Controller_Router_Route(
- 'archive/:annee',
- array(
- 'annee' => 2006,
- 'controller' => 'archive',
- 'action' => 'show'
- ),
- array('year' => '\d+')
- );
- $router->addRoute('archive', $route);
- ]]></programlisting>
- <para>
- Avec une telle définition de route, comme ci-dessus, le routeur n'établira une
- correspondance que si la variable "<emphasis>annee</emphasis>" contient une donnée
- numérique : <filename>http://domaine.fr/archive/2345</filename>. Une
- <acronym>URL</acronym> comme <filename>http://exemple.annee/archive/test</filename>
- ne sera pas captée (matchée) par cette route, et le contrôle sera passé à la route
- suivante, etc.
- </para>
- </sect4>
- </sect3>
|