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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 37
    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 : 679
    Points
    679
    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 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    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 ^^

  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 : 37
    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 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    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)

  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 : 37
    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...

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