Ajouter une bibliothèque perso à un projet Zend

En général, après avoir saisi les rudiments de base du Zend Framework, à savoir mettre en place un projet MVC simple, utiliser les contrôleurs et les vues qui en découlent, etc, c’est ensuite que les choses se compliquent, tout du moins en apparence. On pense avoir fait un bon gros travail – et c’est le cas lorsque l’on débute totalement – mais on découvre vite qu’il y a encore du chemin et de la sueur lorsque les premiers pas hors du sentier battu arrivent, à savoir tous les concepts annexes, l’inclusion d’autres bibliothèques ou de bibliothèques perso, les plugins, etc. On se rend compte que le déjà long apprentissage du framework « de base » n’était qu’un avant gout de la suite. Cette introduction n’a pas pour but de faire peur, d’ailleurs nous allons voir qu’il faut juste comme toujours se documenter et plonger dans le manuel et qu’au final, les choses s’assemblent bien et les concepts sont bien logiques.

Les plugins

Ce billet et le prochain vont s’intéresser à deux choses qui arrivent très vite dans le développement d’un projet ZF et qui sont vraiment faciles à comprendre et à mettre en place : dans un premier temps, nous allons voir comment inclure notre bibliothèque perso, puis dans le prochain article, il sera question de la mise en place d’un plugin de Front Controller.
Les plugins semblent bien obscurs au départ, car il existe une pléthore de termes s’en rapprochant lorsque l’on lit la documentation, des sites techniques ou des blogs : Front Controller Plugin, Resource Plugin, View Helpers, Controller Action Helper, Controller Action Helper, Custom libraries or plugins … Ici, comme mentionné plus haut, nous allons nous intéresser aux custom libraries/plugins.

Ce tutoriel suppose que vous avez un nouveau projet ZF 1.12 fraichement crée, ceci n’étant pas expliqué dans cet article (voir ici pour sa mise en place).

Bibliothèque perso

On va parler ici de bibliothèque perso ou de plugin perso (custom library/plugin), il s’agit une collection de classes pouvant être utilisées partout dans un projet, ce sont en général des classes « métier », des classes qui font des tâches spécifiques à votre application, des modèles, qui ne dépendent pas des bibliothèques Zend.

La mise en place d’un tel plugin nécessite seulement les 3 premières étapes ci-dessous (les 2 autres sont pour le tester immédiatement) :

  1. Ajouter un répertoire dédié au même niveau que la bibliothèque Zend (sous library/)
  2. Le déclarer dans application.ini
  3. Ajouter la ou les classes perso
  4. Faire appel à notre plugin dans un contrôleur
  5. Afficher le résultat dans la vue

La première étape nécessite simplement d’ajouter notre répertoire sous library/ là où est notre implémentation de ZF, par exemple appelons-le Test.

Ensuite, il faut indiquer à notre application l’existence de ce répertoire, dans le fichier application.ini. De cette manière ZF saura auto-loader notre plugin qui aura l’espace de nom (namespace) qu’on lui donne. Ajouter ceci dans la partie production :

autoloaderNamespaces[] = "Test_"

Mon fichier application.ini ressemble à cela :

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

autoloaderNamespaces[] = "Test_"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Il ne reste plus qu’à ajouter une classe perso, que nous appelerons LesDates.php et qui pour l’exemple aura une méthode pour afficher la date du jour. La classe doit suivre la convention de nommage PEAR utilisée par ZF pour que l’auto-load fonctionne. On préfixe donc avec notre namespace, puis le nom de la classe séparés par un caractère blanc (underscore). A placer donc dans notre nouveau répertoire/namespace library/Test.

class Test_LesDates
{
    public function afficheDate()
    {
    	return "Date d'aujourd'hui : ".date("Y-m-d H:i:s");
    }
}

Test

Essayons de l’utiliser dans un controlleur, on ouvre application/controllers/IndexController.php et dans la méthode indexAction(), on ajoute :

$maDate = new Test_LesDates();
$this->view->afficheMoi = $maDate->afficheDate();

Au tour de la vue correspondante, soit application/views/scripts/index/index.phtml :

<?php echo $this->afficheMoi ?>

En pointant votre navigateur sur la page d’index, la date du jour devrait s’afficher. C’était plutot facile non. Prochaine étape, le Front Controller Plugin.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *