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 »