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

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Générateur de formulaires


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut Générateur de formulaires
    Bonjour à tous.

    Quand on utilise du MVC, on a souvent besoin de helpers pour se simplifier la vie. Générer un formulaire et permettre son remplissage avec plusieurs jeux de données (un objet modèle et des paramètres de requête par exemple) devient vite un casse-tête. A cet effet, j'ai créé un ensemble de classe destinées à générer et à manipuler un formulaire XHTML.

    Un exemple vaut plus qu'un long discours:
    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
     
    $form = new FormHelper();
     
    $form->addFieldset("Section A")
         ->addLine('test1')
         ->addLine('test2', 'test 2', 'radio-group', array('a' => 1, 'b' => 2, 'c' => 3))
         ->addLine('test3', 'test 3', 'textarea', 'POK');
     
    $form->addFieldset("Section B")
         ->addLine('test4', 'test 4', 'select', array('a' => 1, 'b' => 2, 'c' => 3))
         ->addLine('test5', 'test 5', 'checkbox-group', array('a' => 1, 'b' => 2, 'c' => 3))
         ->addLine('test6', 'test 6', 'file');
     
    $form->appendChild(InputHelper::export('save', 'submit', 'save'));
    $form->autoFill(array(
        'test1' => "Un texte quelconque",
        'test2' => 2,
        'test3' => "Lorem ipsum sit amet ....",
        'test4' => 2,
        'test5' => 2,
    ));
     
    echo $form;
    Va générer:


    Il est possible de créer / manipuler n'importe quel élément de formulaire de manière atomique au travers des classes suivantes:
    - CheckboxGroupHelper.class.php
    - FieldsetHelper.class.php
    - FormHelper.class.php
    - FormLine.class.php
    - InputHelper.class.php
    - LabelHelper.class.php
    - OptionHelper.class.php
    - RadioGroupHelper.class.php
    - SelectHelper.class.php
    - TextareaHelper.class.php
    Ces classes sont dans le package joint à ce post.

    L'avantage marteau de cette structure est la possibilité de remplir automatiquement un formulaire ou un fieldset avec des données en provenance d'un tableau ou d'un objet (Model dans mon cas qui est la classe de base de mes modèles.)

    La plupart des méthodes des objets helpers renvoient leur référence de sorte à pouvoir faire du chainage.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo FomHelper::export('index.php')
      ->appendChild(FieldsetElement::export('légende'))
      ->appendChild(FormLine::export('test', 'Un Test'))
      ->getInput()
      ->setId('un_id');
    Va créer un formulaire puis y mettre un fieldset puis y mettre une nouvelle ligne puis obtenir l'input pour changer son ID.

    Si ça intéresse du monde, je suis disposé à documenter ces classes et fournir un manuel

    Merci de ne pas venir hurler que ça existe déjà dans la plupart des frameworks actuels et que j'ai réinventé la roue, j'en suis conscient. J'avais simplement besoin d'une structure simple et implémentable immédiatement.

    -- Edit

    Vous trouverez la documentation DoxyGen jointe à ce post.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Moi je suis intéressé par de la documentation sur cette classe.

    Et sinon, bien joué ;-)

    Code clair, net et précis :-D

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si je puis me permettre une petite critique , il manque un système simple de validation.
    J'ai fait pour mon framework un outil similaire pour les formulaires et pouvoir spécifier des validateur (même basique) pour chaque champs est un confort non négligeable.

    Dans mon cas ça donne quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form->add('Text','phone')->label('Téléphone')->id('idinput')->addValidator('Digit');
    Du coup au moment de la soumission du formulaire , on vérifie que le champs remplie bien les critère du validateur. Si ce n'est pas le cas on le ré affiche le formulaire avec un message.

    J'ai pas regardé le code en détail , mais as tu prévu une solution pour simplement insérer de l'html dans ton formulaire ? Quand on travail avec des designer un peu fou , on se retrouve souvent obligé d'insérer de l'html au milieu du formulaire pour répondre à leur besoin ^^
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'ai pas regardé le code en détail , mais as tu prévu une solution pour simplement insérer de l'html dans ton formulaire ? Quand on travail avec des designer un peu fou , on se retrouve souvent obligé d'insérer de l'html au milieu du formulaire pour répondre à leur besoin ^^
    Yes, BaseHelper::appendChild() peut prendre une instance qui surcharge __toString ou une chaine toute simple.

    Du coup au moment de la soumission du formulaire , on vérifie que le champs remplie bien les critère du validateur. Si ce n'est pas le cas on le ré affiche le formulaire avec un message.
    Je n'ai pas encore résolu cette problématique car je n'ai pas encore décidé par quel moyen je vais conserver cet objet entre les pages... Pour le moment, j'implémente des validateurs JS, c'est plus sexy pour l'utilisateur final.

    -- EDIT

    @Grunk
    J'aimerai beaucoup voir la façon dont tu as implémenté tes validateurs. D'apès l'exemple que tu as fourni, je suppose que ton form helper est un factory d'objet Validator. Je suis contre cette approche car, dans le MVC, ce sont les contrôleurs qui sont responsables de la validation et non les vues, ce n'est donc logiquement pas au form helper de les générer.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    @Grunk
    J'aimerai beaucoup voir la façon dont tu as implémenté tes validateurs. D'apès l'exemple que tu as fourni, je suppose que ton form helper est un factory d'objet Validator. Je suis contre cette approche car, dans le MVC, ce sont les contrôleurs qui sont responsables de la validation et non les vues, ce n'est donc logiquement pas au form helper de les générer.
    J'ai effectivement une factory de validateur. Je suis d'accord avec toi sur le fait que ca respecte pas le modèle MVC à la lettre , c'est juste plus pratique dans mon cas

    Pour info tu peux voir un extrait du Fw avec form et validateur ici (zip 34ko)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Merci Grunk, je vais jeter un oeil.

    -- Edit

    Au point ou tu en es dans tes classe tu aurais aussi bien fait d'étendre les classes de DOMElement (ce que j'ai fait pour un autre composant) c'est beaucoup plus flexible que la solution évoqué dans ce thread mais aussi plus contraignant.
    Tes classes ressemblent aux miennes, à ce détail près qu'elles sont beaucoup plus spécialisées et donc plus sûres (et du même coup plus contraignantes).
    Je vais documenter les miennes en Doxygen pour ArkAm, je reviens...

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Et voilà la doc (voir le premier post).

  8. #8
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    Merci bien m'sieur

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Super ! Merci, je m'en vais la tester sur ce pas.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    La dernière version de cette librairie est disponible ici: http://code.google.com/p/php-axiom/

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    La dernière version de cette librairie est disponible ici: http://code.google.com/p/php-axiom/
    La fonction setId() n'existe pas, sinon il est pas mal ton helper !

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour setter un attribut (id compris) il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $textarea = new TextAreaHelper('name', 'value');
    $textarea->setId("id-textarea");
    $textarea->setTitle('titre');
    ça passe dans la méthode __call de BaseHelper.

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    AHhh ok, merci !

  14. #14
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    beau travail
    petit detail (tellement petit que je suis surment passe a cote)... mais as-tu prevu la possibilite d'une valeur par default ? (je pense notamment aux checkbox/radio)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  15. #15
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Non la plupart n'ont pas de valeur par défaut car l'attribut value n'est pas mandataire en XHTML. Il faut la mettre à la main ou remplir le formulaire avec une série de valeur comme spécifié dans l'exemple.

Discussions similaires

  1. Générateur de formulaires WYSIWYG
    Par amazircool dans le forum Webdesign & Ergonomie
    Réponses: 4
    Dernier message: 26/03/2007, 17h16
  2. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  3. [Struts] Générateur de formulaires pour le web ?
    Par Adrien09 dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/10/2006, 11h19
  4. Générateur de formulaire
    Par slimjoe dans le forum Delphi
    Réponses: 4
    Dernier message: 20/09/2006, 14h06
  5. [phpMyAdmin] générateur de formulaire
    Par meufeu dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 16/11/2005, 12h01

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