Par Nicolas SUPRIN, mercredi 28 décembre 2005 à 19:38 | PEAR | #19 | rss
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.inides classe de DAOclass_location: répertoire ou seront créés les fichiers de classe de DAO (le même queschema_location)require_prefix: préfixe pour le requireclass_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 !





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
Aucun trackback.
Pour faire un trackback sur ce billet : http://www.blog.cactuscrew.com/tb.php?id=19&chk=jmsm9g