Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    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 :
    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 :
    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 expérimenté
    Avatar de ArKam
    Inscrit en
    mars 2007
    Messages
    530
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : mars 2007
    Messages : 530
    Points : 563
    Points
    563

    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 Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 085
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 085
    Points : 6 893
    Points
    6 893

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

  4. #4
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    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 Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 085
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 085
    Points : 6 893
    Points
    6 893

    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

  6. #6
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    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 Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    Par défaut

    Et voilà la doc (voir le premier post).

  8. #8
    Membre expérimenté
    Avatar de ArKam
    Inscrit en
    mars 2007
    Messages
    530
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : mars 2007
    Messages : 530
    Points : 563
    Points
    563

    Par défaut

    Merci bien m'sieur

  9. #9
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    Super ! Merci, je m'en vais la tester sur ce pas.

  10. #10
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    Par défaut

    La dernière version de cette librairie est disponible ici: http://code.google.com/p/php-axiom/

  11. #11
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 3
    Points : 3
    Points
    3

    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 Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    Par défaut

    Pour setter un attribut (id compris) il suffit de faire:
    Code :
    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
    Invité de passage
    Homme Profil pro
    Inscrit en
    mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : mai 2011
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    AHhh ok, merci !

  14. #14
    Membre Expert
    Avatar de Doksuri
    Profil pro Tiger Scott
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Nom : Tiger Scott
    Âge : 44

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 1 289
    Points : 1 560
    Points
    1 560

    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.

    N'oubliez pas le Le tag resolu.

    Need_!

  15. #15
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 26
    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 932
    Points : 7 812
    Points
    7 812

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •