Zend Code Generator : une vrai pépite

Ce qui prend du temps quand on est développeur web, ce sont les taches répétitives, et elles n’apportent aucune nouvelle connaissance.

Pire, si ces taches sont espacées dans le temps, (création d’1 application tous les 6 mois / 1 an), on veut implémenter de nouvelles choses, plus innovantes, plus réfléchies que les fois précédentes. Et 3 ou 4 ans après, on n’a aucune base solide pour créer un nouveau projet sans repartir « from scratch ». On récupère quelques morceaux de codes par-ci, par-là, c’est assez chaotique.

Pour contrecarrer ce travail ennuyeux, pourquoi ne pas créer votre application « modèle » ?

Une application fonctionnelle, simple, de base.

Le but est de créer une application, basée ou non sur une base de données, avec toutes les composantes que d’habitude vous « copiez-collez » depuis vos anciens projets, oui, oui on le fait tous copier-coller, moi ? jamais ! ne niez pas…

Zend Code Generator permet de structurer vos fichiers, php certes, mais on peut aussi bien l’utiliser pour d’autres langages ou des fichiers de config par exemple

Il y a d’abord Zend_CodeGenerator_Php_File

$dbClassFile = new Zend_CodeGenerator_Php_File();
$dbClassFile->setFilename('/models/' . $name . 'DB.php');
$dbClassFile->setBody('le contenu de mon fichier php');
file_put_contents($dbClassFile->getFilename(), $dbClassFile->getBody());

On peut inclure dans la generation des require_once

$a_required[] = "' . APPLICATION_PATH . '../models/" . $name . "DB.php";
$controllerClassFile->setRequiredFiles($a_required);

je vous l’accorde c’est pas très beau quand on utilise des constantes pour les chemins parce qu’il génère quelque chose comme ça :

require_once '' . APPLICATION_PATH . '../models/AnimalDB.php';

On peut inclure une classe Zend_CodeGenerator_Php_Class

$controllerClassFile->setClass($controllerClass);

Zend_CodeGenerator_Php_Class permet de définir

  • son nom évidement
  • la classe dont elle hérite
  • les propriétés de votre objet
  • des méthodes
  • et les commentaires phpDoc qui vont avec
$db_class = new Zend_CodeGenerator_Php_Class();
$db_class->setName($name .'DbTable');
$db_class->setDocblock(new Zend_CodeGenerator_Php_Docblock(array(
 'shortDescription' => $name . ' db parser',
 'tags' => array($a_authorTag, $a_versionTag, $a_packageTag["modelParser"]))));

$db_class->setExtendedClass('Zend_Db_Table_Abstract');
$db_class->setProperty(array('name' => '_name',
 'visibility' => 'protected',
 'defaultValue' => $table,
 'docblock' => array('tags' => array(new Zend_CodeGenerator_Php_Docblock_Tag(array('name' => 'var', 'description' => 'string table name'))))));

Pour les méthodes, rien de bien compliqué, Zend_CodeGenerator_Php_Method a des méthodes setName, setBody et setDocBlock

$my_o_method->setBody('$TestTable = new TestDbTable(array(\'db\' => \'my_db\'));
 $Tests = $TestTable->fetchAll();
 echo "<pre>";
 print_r($Tests);
 echo "</pre>";'
);

Si vous arrivez à bien vous représenter ce que vous faites à chaque nouveau projet, vous pourrez gagner beaucoup de temps.

Malgré le fait qu’il ne soit pas très connu, il a été créé dans la v1.8, ce composant a un potentiel énorme.

Adopté !!

la doc officielle