IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

[Outil] Zenerator, générateur de code pour les applications ZF


Sujet :

Zend Framework PHP

  1. #1
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 27
    Points
    27
    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.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 27
    Points
    27
    Par défaut C'est passé
    en appelant directement zenerator/index.php,
    et en perdant le template !

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 27
    Points
    27
    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.

  6. #6
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Il y a de grandes chances que le soucis se trouve dans le fichier .htaccess. Tu dois modifier ces deux lignes :
    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 ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 27
    Points
    27
    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

  8. #8
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Hmmm. Essaie de remplacer
    RewriteBase /Zenerator/
    par
    RewriteBase /
    Merci

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 27
    Points
    27
    Par défaut Réglé
    Un grand merci,
    tout va bien maintenant,
    Bernard

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    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 : 467
    Points : 647
    Points
    647
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    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 :
    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 :
    RewriteBase /Zenerator
    Note : je ne développe plus cette application, et ne la maintient plus.

  12. #12
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    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.

  13. #13
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tu as bien modifié le fichier .htaccess comme expliqué dans le message précédent ?

  14. #14
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Tout semble ok avec le .htaccess

    D.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $query = $db->select()
                        ->from( array("m" => "membre") )                           
                        ->where( "m.id = ?", $id );
    Voici la classe corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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); 
        }
    }

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Il est donc déconseillé d'utiliser Zenerator ?

  17. #17
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    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

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    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 ;-)

  19. #19
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    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

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Points : 230
    Points
    230
    Par défaut
    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...)

Discussions similaires

  1. Code HTTP pour les applications non démarrées
    Par franquemagnee dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 01/04/2015, 09h53
  2. Réponses: 1
    Dernier message: 16/09/2009, 17h18
  3. [WinForms] Skin pour les applications .net
    Par algerian dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 30/06/2006, 11h31
  4. [C#] Skin pour les applications .net
    Par algerian dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2006, 11h13
  5. Réponses: 3
    Dernier message: 04/10/2005, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo