Magazine Internet

Zend Framework #5 : Routing et UrlRewriting avec Zend_Controller

Publié le 18 janvier 2010 par Alexandre_julien

banner zf logo v1 9 Zend Framework #5 : Routing et UrlRewriting avec Zend ControllerUn point essentiel à ne pas négliger sur une application Web est la ré-écriture d’URL via un système de routeur. Pourquoi ré-écrire des Urls alors que l’utilisateur n’en tape jamais directement ? Et bien tout simplement, parce que l’utilisateur ne comprend pas forcement où il se trouve sur le site en regardant une Url de type « index.php?category=43&id=32&session=ad4zcf43lpo&page=322214421″. Une url comme « maboutique.com/composants/processeurs/intel/liste-des-processeurs.html » est beaucoup plus parlante.

La preuve c’est qu’ il s’agit du 3ème point qui influe le plus le référencement d’une page. Et puis on peut également avoir besoin internationaliser ses urls.

Zend Framework possède un routeur, qui permet de manipuler plus facilement les liens entre les pages au sein d’une application et également de faire de la réécriture.

Cette étape se fait au sein du Bootstrap d’une application Zend Framework et grâce à Zend_Controller.

Il faut tout d’abord surcharger la méthode _initAutoLoad() du Bootstrap et récupérer l’instance de Zend_Controller

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=>'', 'basePath'=>APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

return $moduleLoader;
}

}

Ensuite il suffit simplement de créer ses routes et de les rajouter au routeur du contrôleur.
Pour cela on a plusieurs possibilités, on peut créer des routes statiques, des routes basées sur les modules, etc …
Le plus efficace est de créer des routes à partir d’URL pré-formatées grâce à des expressions régulières.
On devra donc créer des instances de la classe Zend_Controller_Router_Route_Regex.

On la construira avec les arguments suivants :

1) La route : sous forme d’expression régulière (exemple : ‘produits/(.+)/(.+)/article-(.+)-(.+).html’)
2) Le lien MVC : il faut donner les éléments statiques pour accéder à la page, c’est à dire le module, le contrôleur et l’action cible (exemple : array(‘module’ => ‘default’, ‘controller’ => ‘products’, ‘action’ => ’showProduct’))
3)Le mapping des paramètre : on donne dans l’ordre le nom des paramètres que l’on passera dans l’Url (exemple : array(1 => ‘category’, 2=> ’subcategory’, 3 => ‘product_title’, 4 => ‘product_ref’))
4) Le chemin inverse : une version de l’url interprétable par la fonction sprintf() de PHP (exemple : ‘produits/%s/%s/article-%s-%d.html’)

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=>'', 'basePath'=>APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

// Nouvelle route pour accéder à produit
$article = new Zend_Controller_Router_Route_Regex(
 'produits/(.+)/(.+)/article-(.+)-(.+).html',
 array('module' => 'default', 'controller' => 'products', 'action' => 'showProduct'),
 array(1 => 'category', 2=> 'subcategory', 3 => 'product_title', 4 => 'product_ref'),
 'produits/%s/%s/article-%s-%d.html');
$router->addRoute($article);

return $moduleLoader;
}

}

Ainsi on pourra créer et appeler une url de type : « www.maboutique.com/produits/processeurs/dual-core/article-intelcore2duo-PI5421.html »


Retour à La Une de Logo Paperblog

A propos de l’auteur


Alexandre_julien 60 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine