vendredi 11 septembre 2009, par Brice Favre
Avant de prendre quelques semaines de repos bien mérités, j’ai commencé à étudier Zend Tool et Zend Application. Entre temps une nouvelle version de Zend Framework est sortie et j’ai pu investiguer d’avantage et me retrouver confronter à plusieurs questions d’architecture :
La mise en place de modules
L’intégration de l’ORM Doctrine
L’utilisation d’un répertoire de librairies propres à l’application
Premier constat, la documentation autour de Zend Application est encore assez faible. Effectivement, on voit dans le Quick Start des références à ce composant, mais il s’avère très léger (normal finalement pour un quickie).
En consultant rapidement l’aide de de la fonction zf.sh, je constate la présence d’une fonction permettant de créer des modules que j’execute aussitôt.
Par la suite, et pour étoffer mon module, je créé un controlleur Index à l’aide de la commande zf.sh create controller name index-action-included module où name est le nom du contrôleur, index-action-included une variable permettant d’indiquer si l’on génère une action index pour le contrôleur (avec son templae) et enfin module est le nom du module. En ligne de commande ça donne ça :
Petit problème, l’adresse suivante http://localhost/monmodule/ affiche le message suivant : Message : Invalid controller specified (monmodule). L’application ne trouve pas le module. Qu’à celà ne tienne, nous allons ajouter, dans application.ini, l’emplacement des modules :
Deuxième petit problème, nous avons maintenant le message suivant : Message : Invalid controller class ("Monmodule_IndexController"). Le problème se situe maintenant dans le contrôleur lui-même, en effet la classe IndexController n’est pas préfixé du namespace MonModule en renommant, dans le fichier monmodule/controllers/IndexController.php IndexController par MonModule_IndexController on obtient la page d’accueil du projet.
Et voilà, désormais nous pouvons créer nos modules en faisant attention à bien indiquer les namespaces. En hackant le provider de Zend Framework, je suis sur qu’on peut s’économiser encore un peu de temps.
J’ai pu remarquer que Zend_Application, par l’intermédiaire des ressources permet de grandement se simplifier la vie en ajoutant des paramètres resources dans application.ini pour créer un Zend_DB comme on peut le voir dans le QuickStart.
Exemple :
Mise en place dans application.ini
Modification du bootstrap pour récupérer l’adaptateur
Dans mon application, j’ai décidé d’utiliser, pour diverses raisons, l’ORM Doctrine. Pour celà j’ai suivi le très célèbre tutorial : Integrating Zend Framework and Doctrine mais il date maintenant un peu et ne prends pas en compte les dernières nouveautés de Zend Framework.
Celui ci par contre http://www.danceric.net/2009/06/06/doctrine-orm-and-zend-framework/ propose une solution complémentaire qui comprends Zend Application. Au final c’est celle que j’ai appliquée.
Petit Bonus : Qui dit Doctrine, dit édition de fichierr yaml. Pour vous faciliter la tâche, sous eclipse, voici un plugin fort utile : YAML Editor.
teasing : Pour faciliter l’intégration Zend_Form, Doctrine, j’ai utilisé cette librairie http://github.com/Vladev/zend-form-doctrine/tree/master. Je vous ferais un retour quand j’aurais des premiers retours.
Le projet impliquait aussi de développer des nouvelles librairies permettant d’étendre les fonctionnalités de Zend Framework. J’ai donc créer un répertoire MyLib dans le répertoire library de mon projet Zend Application. L’enregistrement du namespace se fait ensuite dans le fichier de bootstrap en rajoutant la fonction _initAutoload :
Et voilà, désormais quand je fais un new MyLib_Class() ; , Zend Framework va rechercher le fichier Class.php dans le répertoire MyLib et instancier la classe MyLib_Class.
Je n’ai sans doute pas eu une utilisation très conventionnelle de Zend Application et les commentaires sont les bienvenus. Ce que j’en ressort, c’est que la recherche d’informations est assez difficile sur Zend Framework. C’est un peu pour ça que j’ai voulu synthétiser dans un billet le résultat des mes explorations. C’est un peu touffu mais j’espère avoir l’occasion de rassembler plus tard la documentation par grand thème ou bien sous la forme d’un jeu dont vous êtes le héros ("je veux faire ça alors je me rends ici ou là").
La documentation officielle est exhaustive et traduite, dans sa plus grande partie, en français. Toutefois il manque des exemples concrets permettant d’aller plus loin. Heureusement nombre d’utilisateurs publient des tutoriaux. Un conseil toutefois, vérifiez bien la date de publication. Zend Framework ayant énormément évolués ces dernières années (et mois) que le code peut parfois être erroné ou incomplet.