Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/09/2008, 20h43   #1
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Par défaut [Outil] Zenerator, générateur de code pour les applications ZF

Salut,

Je voulais vous présenter un "outil" que j'ai fait pour m'amuser en premier temps, puis pour accélérer dans une moindre mesure mes développements avec le Zend Framework.

Cet outil, nommé donc Zenerator, développé en PHP5 à l'aide du Zend Framework, permet de générer les fichiers modèles (donc les classes "ORM" qui étendent Zend_Table_Abstract), les contrôleurs d'action et les formulaires, à partir d'une base de données.

Ainsi, vous "modélisez" vos principales tables dans votre base de données, à l'aide d'un outil comme phpMyAdmin par exemple, vous déployez Zenerator sur le serveur hébergeant la base de données, et vous utilisez l'application comme n'importe quelle application web, afin de vous connectez puis générer les fichiers.

Il est clair que vous devrez faire des modifications sur les fichiers générés, ils ne correspondront jamais à une version 100% utilisable. De plus, Zenerator ne génère pas une application complète et fonctionnelle.

Sachant que chaque développeur à ses habitudes, j'ai laissé la possibilité de créer ses propres fichiers "templates". Par conséquent, vous pourrez modifier la structure du code source produit.

Exemple de classe modèle produite, à partir de la table SQL suivante :
Code SQL :
1
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `membre` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `nom` varchar(32) collate utf8_bin NOT NULL,
  `password` varchar(32) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `nom` (`nom`)
)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/**
 * Ce fichier contient la classe Membre.
 *
 * @copyright  2008 Gabriel Malkas
 * @license    "New" BSD License
*/
 
/**
 * @see Zend_Db_Table_Abstract
 */
require_once 'Zend/Db/Table/Abstract.php';
 
/**
 * Classe ORM qui représente la table 'membre'.
 *
 * @copyright  2008 Gabriel Malkas
 * @license    "New" BSD License
 */
class Membre extends Zend_Db_Table_Abstract
{
 
    /*
     * Nom de la table.
     */
    protected $_name = 'membre';
 
    /*
     * Clé primaire de la table.
     */
    protected $_primary = 'id';
 
    /**
     * Recherche une entrée Membre avec la clé primaire spécifiée
     * et modifie cette entrée avec les nouvelles données.
     *
     * @param integer $id
     * @param array $data
     *
     * @return void
     */
    public static function edit($id, $data)
    {        
        $db = Zend_Registry::get('dbAdapter');
        $db->update('membre', $data, 'membre.id = ' . $id);
    }
 
    /**
     * Recherche une entrée Membre avec la clé primaire spécifiée
     * et supprime cette entrée.
     *
     * @param integer $id
     *
     * @return void
     */
    public static function remove($id)
    {
        $db = Zend_Registry::get('dbAdapter');
        $db->delete('membre', 'membre.id = ' . $id);
    }
 
    /**
     * Récupère toutes les entrées Membre avec certains critères
     * de tri, intervalles
     */
    public static function get($order=null, $limit=0, $from=0)
    {
        $db = Zend_Registry::get('dbAdapter');
 
        $query = $db->select()
                    ->from( array("%ftable%" => "membre") );
 
        if($order != null)
        {
            $query->order($order);
        }
 
        if($limit != 0)
        {
            $query->limit($limit, $from);
        }
 
        return $db->fetchAll($query);
    }
 
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param int $id
     */
    public static function findById($id)
    {
        $db = Zend_Registry::get('dbAdapter');
 
        $query = $db->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.id = " . $id );
 
        return $db->fetchRow($query); 
    }
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param varchar $nom
     */
    public static function findByNom($nom)
    {
        $db = Zend_Registry::get('dbAdapter');
 
        $query = $db->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.nom = " . $nom );
 
        return $db->fetchRow($query); 
    }
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param varchar $password
     */
    public static function findByPassword($password)
    {
        $db = Zend_Registry::get('dbAdapter');
 
        $query = $db->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.password = " . $password );
 
        return $db->fetchRow($query); 
    }
 
 
}
Capture d'écran de la page d'accueil

Afin d'avoir plus d'informations, et pour télécharger l'application, rendez-vous sur la page dédiée à cet effet : http://janitrix.developpez.com/zenerator

J'espère que cette application pourra vous être utile

Si vous avez des idées et/ou remarques, n'hésitez pas.

Merci à vous.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 18h58   #2
Membre à l'essai
 
Inscription : mai 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 21
Points : 23
Points : 23
Par défaut Erreur 404

Bonjour,
je suis fort débutant et ...
je n'arrive pas à afficher le form. de connexion (Erreur 404),
je ne vois pas non plus ce que je pourrais changer dans le .htaccess ?
Merci, Bernard.
bboulanger84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 19h09   #3
Membre à l'essai
 
Inscription : mai 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 21
Points : 23
Points : 23
Par défaut C'est passé

en appelant directement zenerator/index.php,
et en perdant le template !
bboulanger84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 20h17   #4
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Tu pourrais me filer quelques infos sur ton système ? OS, serveur HTTP, etc.

Merci.

Ce serait sympa de dire si ça marche chez vous
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 13h21   #5
Membre à l'essai
 
Inscription : mai 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 21
Points : 23
Points : 23
Par défaut Infos système

Hello !

Mon système :

Vista SP1
Xampp 1.6.6a

PHP Version 5.2.5

System Windows NT OPTIPLEX745 6.0 build 6001
Build Date Nov 8 2007 23:18:08
Configure Command cscript /nologo configure.js "--enable-snapshot-build" "--with-gd=shared"
Server API Apache 2.0 Handler
Virtual Directory Support enabled
Configuration File (php.ini) Path C:\Windows
Loaded Configuration File C:\xampp\apache\bin\php.ini

J'espère que cela t'aidera,
Bernard.
bboulanger84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 14h20   #6
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Il y a de grandes chances que le soucis se trouve dans le fichier .htaccess. Tu dois modifier ces deux lignes :
Citation:
RewriteBase /Zenerator/
RewriteRule .* /Zenerator/index.php
Afin qu'elles correspondent à ton système. Le dossier "Zenerator" est déployé directement à la racine de ton serveur web ?
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 18h38   #7
Membre à l'essai
 
Inscription : mai 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 21
Points : 23
Points : 23
Par défaut htaccess prob

Citation:
Envoyé par Janitrix Voir le message
Il y a de grandes chances que le soucis se trouve dans le fichier .htaccess. Tu dois modifier ces deux lignes :

Afin qu'elles correspondent à ton système. Le dossier "Zenerator" est déployé directement à la racine de ton serveur web ?

je m'en doutais un peu, j'ai déjà eu qqes problèmes avec ce fichier pour l'install de mon projet en zendframework.

Sinon, oui, le dossier Zenerator, se trouve bien à la racine du server ...

Merci, Bernard
bboulanger84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2008, 19h17   #8
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Hmmm. Essaie de remplacer
Citation:
RewriteBase /Zenerator/
par
Citation:
RewriteBase /
Merci
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2008, 11h12   #9
Membre à l'essai
 
Inscription : mai 2005
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 21
Points : 23
Points : 23
Par défaut Réglé

Un grand merci,
tout va bien maintenant,
Bernard
bboulanger84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2009, 10h14   #10
Membre expérimenté
 
Homme
Inscription : juillet 2007
Messages : 437
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : juillet 2007
Messages : 437
Points : 558
Points : 558
Bonjour,

J'ai le même souci... Erreur 404 pour la connexion...
- Win XP
- Easy PHP 3 (Apache 2 / Php 5.2.8)
- les fichiers sont à la racine de mon répertoire de publication

Contenu de mon fichier HTACCESS modifié :

Code :
1
2
3
4
5
6
7
8
9
RewriteEngine on
RewriteBase /
 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule .* /index.php
 
php_flag magic_quotes_gpc off
php_flag register_globals off
Je m'en remet à vous !

Merci d'avance
Luc1an0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2009, 14h39   #11
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Voilà, j'ai modifié l'application.

http://janitrix.developpez.com/zenerator/Zenerator.zip

Lorsque vous dézippez les sources dans votre dossier web, il faut modifier le fichier .htaccess pour fournir le bon chemin, comme ceci :
Citation:
RewriteBase /sousdossier
'sousdossier' est le chemin relatif de l'application depuis le dossier racine de votre serveur web. Par exemple, le dossier racine de mon serveur Apache est /var/www. Je dézippe l'application dans un dossier /var/www/Zenerator.
Je dois modifier le fichier .htaccess et mettre :
Citation:
RewriteBase /Zenerator
Note : je ne développe plus cette application, et ne la maintient plus.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2009, 20h36   #12
Invité de passage
 
Inscription : février 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 2
Points : 2
Points : 2
Je sais que l'application n'est plus maintenue mais je recois tout le temps comme message "Not Found

The requested URL /Zenerator/Connection was not found on this server."

Y a un truc qui cloche quelque part?

D.
daolwin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2009, 20h38   #13
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Tu as bien modifié le fichier .htaccess comme expliqué dans le message précédent ?
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2009, 21h07   #14
Invité de passage
 
Inscription : février 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 2
Points : 2
Points : 2
Tout semble ok avec le .htaccess

D.
daolwin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2009, 08h25   #15
Membre à l'essai
 
Inscription : janvier 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 43
Points : 23
Points : 23
Juste une remarque sur ton application:

Les classes générer (enfin du moins l'exemple sur ton premier post) ne sont pas sécurisé ni optimisés.

Comme tu étend les classe de Zend_db_Table_Abstract tu n'as pas besoin de récupérer le connecteur $bd....

De plus dans ce genre de requete attention au SQL injection:

Code :
1
2
3
4
 
$query = $db->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.id = " . $id );
pour sécuriser il vaut mieux faire comme ça:

Code :
1
2
3
4
 
$query = $db->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.id = ?", $id );
Voici la classe corrigé:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
<?php
/**
 * Ce fichier contient la classe Membre.
 *
 * @copyright  2008 Gabriel Malkas
 * @license    "New" BSD License
*/
 
/**
 * @see Zend_Db_Table_Abstract
 */
require_once 'Zend/Db/Table/Abstract.php';
 
/**
 * Classe ORM qui représente la table 'membre'.
 *
 * @copyright  2008 Gabriel Malkas
 * @license    "New" BSD License
 */
class Membre extends Zend_Db_Table_Abstract
{
 
    /*
     * Nom de la table.
     */
    protected $_name = 'membre';
 
    /*
     * Clé primaire de la table.
     */
    protected $_primary = 'id';
 
    /**
     * Recherche une entrée Membre avec la clé primaire spécifiée
     * et modifie cette entrée avec les nouvelles données.
     *
     * @param integer $id
     * @param array $data
     *
     * @return void
     */
    public static function edit($id, $data)
    {        
        $this->update($data, 'membre.id = ' . (int)$id);
    }
 
    /**
     * Recherche une entrée Membre avec la clé primaire spécifiée
     * et supprime cette entrée.
     *
     * @param integer $id
     *
     * @return void
     */
    public static function remove($id)
    {
        $this->delete('membre.id = ' . (int)$id);
    }
 
    /**
     * Récupère toutes les entrées Membre avec certains critères
     * de tri, intervalles
     */
    public static function get($order=null, $limit=0, $from=0)
    {        
        $query = $this->select()
                    ->from( array("%ftable%" => "membre") );
 
        if($order != null)
        {
            $query->order($order);
        }
 
        if($limit != 0)
        {
            $query->limit($limit, $from);
        }
 
        return $this->fetchAll($query);
    }
 
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param int $id
     */
    public static function findById($id)
    { 
        $query = $this->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.id = ?", $id );
 
        return $this->fetchRow($query); 
    }
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param varchar $nom
     */
    public static function findByNom($nom)
    { 
        $query = $this->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.nom = ?", $nom );
 
        return $this->fetchRow($query); 
    }
    /*
     * Recherche une entrée Membre avec la valeur spécifiée
     * et retourne cette entrée.
     *
     * @param varchar $password
     */
    public static function findByPassword($password)
    { 
        $query = $this->select()
                    ->from( array("m" => "membre") )                           
                    ->where( "m.password = ?", $password );
 
        return $this->fetchRow($query); 
    }
}
neeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2009, 00h15   #16
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
Il est donc déconseillé d'utiliser Zenerator ?
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2009, 10h22   #17
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Citation:
Envoyé par mickael.be Voir le message
Il est donc déconseillé d'utiliser Zenerator ?
Oui pour le moment n'est plus maintenu, donc pour le moment il vaut mieux ne pas l'utiliser (tu peux toujours essayer). Cependant, je pourrai reprendre le développement sérieusement, je suis en train de me demander si ça va être utile à quelqu'un d'autre que moi en fait
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2009, 23h27   #18
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
Moi ça m'intéresse fortement en fait. Je me demande comment font les autres?
Il doit y avoir une solution, non? Générer une classe depuis une structure de table... c'est quand même un gain de temps énorme !

Si vous avez d'autres pistes ? Car Zenerator est une chouette idée, mais si un équivalent existe déjà chez ZF, ca ne sert a rien de réinventer la roue ;-)
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2009, 23h36   #19
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
Citation:
Envoyé par mickael.be Voir le message
Moi ça m'intéresse fortement en fait. Je me demande comment font les autres?
Il doit y avoir une solution, non? Générer une classe depuis une structure de table... c'est quand même un gain de temps énorme !

Si vous avez d'autres pistes ? Car Zenerator est une chouette idée, mais si un équivalent existe déjà chez ZF, ca ne sert a rien de réinventer la roue ;-)
Zend_Tool permet de générer le code de base d'une application Zend Framework, il ne permet pas de générer de classe à partir d'une base de données, mais c'est peut être prévu pour une amélioration future ?

Quoi qu'il en soit, c'est effectivement un gain énorme, à condition que la classe générée soit bien foutue, si tu passes 30 minutes pour changer chaque classe ça ne vaut pas le coup. Donc je pense que je vais reprendre le code, corriger tout ça et proposer quelque chose de propre. Je vous tiens au courant

Tu m'as remotivé, merci
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2009, 15h42   #20
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Oui, l'idée du Zenerator n'est pas mauvaise même si pour ma part j'ai plutôt codé mon propre outils CLI de génération de classes modèles capable de proposer d'ajouter des fonctionnalités propres à mon application (i18n, sort, tree, etc...)
patbator est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h36.


 
 
 
 
Partenaires

Hébergement Web