Créer une application Zend Framework avec modules
Introduction
Zend Framework permet de construire une application avec une structure modulaire.
En effectuant un Zend_Debug::dump($this->_request->getParams()); dans IndexController.php on obtiendra les informations suivantes :
array(3) {
["module"] => string(5) "default"
["controller"] => string(5) "index"
["action"] => string(5) "index"
}
Beaucoup d’applications en ligne se contenteront d’un module par défaut, nommé default, situé dans application/. Nul besoin de se soucier des modules dans ce cas de figure. Mais pour d’autres applications, notamment celles comprenant une interface d’administration, ou des actions en ligne de commande (éventuellement pilotées depuis un crontab) il y aura – a minima – deux modules : un pour la partie publique du site, un pour l’interface d’administration. Nous allons voir comment mettre en place une architecture modulaire simple, pour une partie publique (frontend) et une administration (backend).
Commençons par créer une application Zend Framework vide.
Création de l’application
Sous Windows, ouvrez une invite de commandes (cmd), rendez-vous dans le répertoire où vous souhaitez créer votre projet et tapez « C:\[chemin complet vers...]\zf.bat create project modularProject« , par exemple « C:\wamp\www\zf195\bin\zf.bat create project modularProject » si zf.bat se trouve dans C:\wamp\zf195\bin.
Pour les linuxiens, en mode console, rendez-vous dans le répertoire ou vous souhaitez créer votre projet, effectuez un « locate zf.sh » pour récupérer le chemin complet, puis tapez « /[chemin complet vers...]/zf.sh create project modularProject« . Voilà, vous avez un projet vide mais complet.
Ajout des modules
Nous allons commencer par nous rendre dans le dossier nouvellement créé, modularProject. Voici l’architecture du projet :

Dans application/, créons un nouveau répertoire, que nous nommerons modules, et deux sous-répertoires, default et admin.
Copions maintenant les dossiers application/controllers/, application/models/ et application/views/ dans le répertoire default, puis répétons cette opération pour le répertoire admin, avant de supprimer les 3 dossiers d’origine.
Puis ajoutons un fichier Bootstrap.php à la racine de chacun des deux nouveaux dossiers, qui étendra non plus Zend_Application_Bootstrap_Bootstrap mais Zend_Application_Module_Bootstrap, dans lequel nous mettrons une classe Bootstrap préfixée du nom du module, et vide pour le moment. Voici la nouvelle structure de notre application :

Modifications
Nous allons maintenant rentrer dans le répertoire application/default/controllers/, ouvrir le fichier IndexController.php et préfixer le nom de la classe avec le nom du module, en mettant la première lettre en majuscule et en le faisant suivre d’un underscore, comme suit : class Default_IndexController. Nous répèterons cette opération sur ErrorController.php : class Default_ErrorController puis sur les controllers du module admin.
Dans chaque controller, si nous souhaitons faire appel aux modèles du module, nous surchargerons la méthode init() :
public function init() {
parent::init();
$models = $this->_request->getParam('module').'/models';
set_include_path('../application/modules/'.$models . PATH_SEPARATOR . get_include_path());
}
Puis rendons-nous dans le fichier application/configs/application.ini
;remplacer ;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" ;ajouter resources.modules[] = ""
puis dans le fichier application/Bootstrap.php où nous ajouterons la méthode _initAutoLoader
protected function _initAutoLoader() {
$autoloader = Zend_Loader_Autoloader::getInstance();
}
Si nous voulons charger les modèles sans utiliser de require, require_once, include ou include_once.
Votre application fonctionne, il ne vous reste plus qu’à optimiser le code ci-dessus, et à développer votre application.
