CactusCrew

CactusCrew
 
HOW TO : Génération de DAO avec DB_DataObject

Voici un début d'idée afin de générer des DAO facilement à partir d'une structure de base de données.

Présentation

Comment éviter de gaspiller du temps à écrire des classes de Data Access Object ? En les générant bien sûr !
C'est ici que PEAR rentre en jeu. Il propose en effet un package nommé DB_DataObject permettant la génération de DAO à partir de la structure d'une base de données.
Pour le moment, je me suis arrêté à la génération des classes, je n'ai pas eut le temps de les exploiter.

How To

Etape 1 : Installation du package

S'assurer que DB_DataObject est installé. Dans tout les cas, je vous conseille de télécharger le dernier package sur le site de PEAR. En effet, il contiendra les dernières mises à jour, et il inclut un exemple de fichier de configuration, que sera bien pratique pour la suite.

Etape 2 : Création du fichier de configuration

Ce fichier à pour but de renseigner l'accès à la base, et diverses options de génération de classes. Nous nous attarderons sur les options les plus courantes pour le moment.
La création d'un fichier de configuration (ou la modification du fichier exemple example.ini dans le docs du package), n'a rien de très compliqué.
Les paramétres obligatoires sont :

  • database : les dsn de la base de données :
  • schema_location : répertoire sera stocké le fichier .ini des classe de DAO
  • class_location : répertoire ou seront créés les fichiers de classe de DAO (le même que schema_location)
  • require_prefix : préfixe pour le require
  • class_prefix : préfixe des noms de classe (pensez à mettre un underscore à la fin, c'est plus propre)

Voici un extrait du fichier de config

[DB]


;portability = 15
                ; if you are working with oracle (or plan to) - this will do things
                ; like force lowercase table names (see the PEAR DB manual

[DB_DataObject]

database        = mysql://login:password@serveur/base
                ; the default database dsn see pear spec for more details

 

schema_location = /var/www/libs/dao
                ;directory where the database ini files are..

; ini_{databaseName} = /path/to/ini/file.ini:/path/to_another_ini/file.ini
                ; you can also configure manually the ini_file location 
                ; (and the links is expected to be in the
                ; same location) for each database by using the syntax
                ; use a PATH_SEPERATOR to load multiple files.
                ; BEST USED WITH database_{databasename}  = dsn...


; links_{databaseName} = 
                ; allows you to specify a specific links.ini file for a database
                ; or project.

class_location  = /var/www/libs/dao/DataObjects_%s.php
                ; directory where the Table classes are..
		; you can also use the format
		; /home/me/Projects/myapplication/DataObjects_%s.php
		; and %s gets replaced with the tablename.

require_prefix  = DataObjects/
                ;  prefix for the 'require statement'

class_prefix    = DataObjects_
                ; Prefix Mapping of table name to PHP Class

Etape 3 : Génération des classes

Sous Unix, depuis une console
/usr/bin/php /var/www/libs/pear/DB/DataObject/createTables.php /var/www/example.ini
Sous Unix, depuis un navigateur
<?php
$cmd = '/usr/bin/php /var/www/libs/pear/DB/DataObject/createTables.php /var/www/example.ini > machin.log';
exec($cmd);
?>
Windows, accès console

Il existe un script bash dans le répertoire scripts du package, qui demande comme paramètres le chemin du fichier .ini. Mais il est également plus simple, je trouve, de taper directement la commande suivante :

C:\PHP\php "C:\Program Files\Apache Group\Apache2\htdocs\libs\pear\DB\DataObject\createTables.php" "C:\Program Files\Apache Group\Apache2\htdocs\example.ini"
Windows, depuis un navigateur

Le souci avec cette méthode est qu'il est difficile de voir quelles erreurs se produisent (si erreurs il y a!)

<?php
$cmd = 'C:\PHP\php "C:\Program Files\Apache Group\Apache2\htdocs\libs\pear\DB\DataObject\createTables.php" "C:\Program Files\Apache Group\Apache2\htdocs\example.ini"';
exec($cmd);
?>

Conclusion

Si le fichier de configuration, et les chemins entrés en ligne de commande sont bon, la génération des classe ne doit pas poser de problèmes. C'est un moyen simple et efficace qui permet de gagner du temps lors du développement.
A venir, nous verrons comment étendre les DAO générées, et par la suite, la génération des formulaires avec DB_DataObject_FormBuilder !

 
PDF
« retour à l'accueil
Commentaires
1.   Nicolas SUPRIN  |  jeudi 29 décembre 2005 à 10:07
Excellent PDF sur le sujet : http://www.21st.de/downloads/rapidprototyping.pdf
 
2.   Justin Patrin  |  mercredi 9 août 2006 à 17:14

I suggest you use shell script or batch files instead of PHP scripts for running commands. It's a waste to just do an exec call in a PHP script. Just do something like:

#!/bin/sh
/usr/bin/php /var/www/libs/pear/DB/DataObject/createTables.php /var/www/example.ini > machin.log

 
« retour à l'accueil
Trackbacks

Aucun trackback.

Les trackbacks pour ce billet sont fermés.

 
Ajouter un commentaire

Les commentaires pour ce billet sont fermés.