Routage statique


Quand une application basée sur Zend Framework prend un peu d’ampleur et que des modules sont utilisés,  il peut être utile d’avoir recours au routage pour garder les urls un minimum lisibles.

Nous allons voir comment configurer Zend_Controller_Router_Rewrite pour mettre en place un système simple de routage.

 

Un petit tour dans la doc ? Zend_Controller_Router

Pour commencer nous devons créer les routes. Il y a plusieurs façon de définir les routes (code source, xml…),  nous utiliserons ici un fichier INI nommé  routes.ini .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
[test]
routes.accueil.route                               = accueil
routes.accueil.defaults.controller                 = home
routes.accueil.defaults.action                     = accueil
routes.article-nouveau.route                       = nouvel-article
routes.article-nouveau.defaults.module             = publication
routes.article-nouveau.defaults.controller         = article
routes.article-nouveau.defaults.action             = nouveau
routes.article-edit.route                          = editer-article/:id
routes.article-edit .defaults.module               = publication
routes.article-edit .defaults.controller           = article
routes.article-edit .defaults.action               = editer

Les sections dans les fichiers INI sont assez pratiques, il est par exemple possible ici de définir différentes sections de routes selon si nous sommes en développement ou en production, etc… Nous utiliserons ici la section [test] qui est d’ailleurs la seule.
Vous remarquerez que la route accueil n’a pas de module, le module sera donc automatiquement reconnu comme celui par défaut.

Il faut maintenant configurer le FrontController pour qu’il prenne en compte nos nouvelles routes.
Tout se passe dans le bootstrap:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
protected function _initRouter() {
// Chargement des routes
$conf = new Zend_Config_Ini(APPLICATION_PATH.'/configs/routes.ini','test');
//initialisation du contrôleur frontal
$this->bootstrap('frontcontroller'); //si cela n'est pas déjà fait
$fc = $this->getResource('frontcontroller');
//configuration du router
$router = $fc->getRouter();
$router->addConfig($conf,'routes');
return $router;
}

Premièrement nous parsons notre fichier INI avec Zend_Config_Ini qui prend en paramètre le chemin du fichier et la section à utiliser.
La constante APPLICATION_PATH à été préalablement défini dans le index.php comme ceci:

1
2
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . './application'));

Attention, il peut y avoir un problème avec realpath(dirname(__FILE__) sur certains serveurs… A vous de redéfinir votre constante si besoin.

Deuxièmement, nous devons récupérer une instance du FrontController, pour cela nous utiliserons les ressources du bootstrap. Il ne reste plus qu’à récupérer l’instance de Zend_Controller_Router_Rewrite grâce à la méthode du FrontControllergetRouter()et de lui passer notre objet de configuration Zend_Config_Ini en lui indiquant la racine de nos routes, ici routes.

Pour finir ce petit aperçu il faut quand même voir comment accéder à ses routes pour ne pas tout écrire à la main.
Donc voici l’aide de vue Zend_View_Helper_Url :

1
echo $this->url(array('id'=>5),'article-edit');

Son utilisation dans un script de vue est  assez simple comme vous pouvez le voir. En premier argument un tableau de paramètres (ou un tableau vide selon la route) et en second le nom de votre route. Pour l’instant je n’ai rien trouvé de bien convaincant concernant une aide d’action du même type. Je vous conseille donc soit d’en faire une, soit d’utiliser $this->view->url(), ce n’est pas le plus propre mais cela fonctionne.

Il faut savoir que Zend_Controller_Router permet de gérer une multitude de routages, de manière statique comme dans ce tuto, dynamique, basé sur desexpressions régulières, etc…
Il ne faut donc pas hésiter à se plonger dans la doc pour au moins se renseigner sur les possibilités du composant que l’on veut utiliser. Bien souvent une petite méthode bien cachée nous simplifiera la vie!

From nanane.fr

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s