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_Form PHP Discussion :

Formulaire un peu spécial


Sujet :

Zend_Form PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut [Résolu]Formulaire un peu spécial
    Bonjour c'est encore moi je bataille toujours autan avec les Forms :

    je voudrez créer un formulaire qui ressemble à ça :



    Mais je ne c'est pas du tout comment le gérer. (j'imagine qu'il ne faut pas que je créé 30 champs différents)
    Donc si vous avez quelques minutes à consacrer pour m'indiquer la voie de la solution j'en serai reconnaissant ! D'avance merci.

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    essaye d'abord de faire fonctionner un formulaire avec juste la 1re ligne
    une fois que ce formulaire fonctionne tu auras juste besoin d'ajouter une boucle pour créer toutes les lignes

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    J'ai réussi à faire le formulaire avec juste une seule ligne :
    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
     
     
    <?php
     
    class Form_Myform extends Zend_Form {
     
    public function init(){
     
            $this->setMethod('post');
     
     
            $elementUserPseudo = new Zend_Form_Element_Text('forced_userPseudo');
            $elementUserPseudo->setLabel('1');
            $this->addElement($elementUserPseudo);
     
    	$elementUserpass = new Zend_Form_Element_Text('forced_userpass');
             $elementUserpass ->addValidator('StringLength', true, array(10));
             $elementUserpass ->setAttrib('maxlength',10);
           	 $this->addElement($elementUserpass );
     
    		$elementUserEmail = new Zend_Form_Element_Text('forced_userEmail');
            $elementUserEmail->addFilter('StringToLower');
            $elementUserEmail->setRequired(true);
            $elementUserEmail->addValidator('NotEmpty', true);
            $elementUserEmail->addValidator('EmailAddress'); 
            $this->addElement($elementUserEmail);
     
           }
     
    }
    ?>

    Mais après comment je fait pour répéter x fois les champs et surtout comment les traiter correctements

  4. #4
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    essaye ça :
    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
    <?php
     
    class Form_Myform extends Zend_Form
    {
        public function init()
        {
            $this->setMethod('post');
     
            for ($i = 1; $i <= 10; $i++) {
     
                $elementUserPseudo = new Zend_Form_Element_Text("forced_userPseudo_$i");
                $elementUserPseudo->setLabel("$i");
                $this->addElement($elementUserPseudo);
     
                $elementUserpass = new Zend_Form_Element_Text("forced_userpass_$i");
                $elementUserpass ->addValidator('StringLength', true, array(10));
                $elementUserpass ->setAttrib('maxlength',10);
                $this->addElement($elementUserpass );
     
                $elementUserEmail = new Zend_Form_Element_Text("forced_userEmail_$i");
                $elementUserEmail->addFilter('StringToLower');
                $elementUserEmail->setRequired(true);
                $elementUserEmail->addValidator('NotEmpty', true);
                $elementUserEmail->addValidator('EmailAddress'); 
                $this->addElement($elementUserEmail);
            }
        }
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    ça marche bon certes un peu en vrac (je vais le gérer avec les décorators, si j'arrive)
    juste pour moi les $i entre quote n'était pas pris en compte, mais bon c'est facile de régler ça.

    Merci beaucoup je vais aller m'amuser avec les CSS, après je verrai le traitement du POST mais bon je pense que ça ira !!
    Encore merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Bon je n'arrive pas à mettre ce formulaire en forme avec les decorator...
    Donc j'ai essayé avec une autre manière :
    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
     
     
    //construciton du formulaire
    	echo '<div id="forced_form">';
    	echo '<div id="forced_form_head">';
    	echo '<div id="forced_form_head_item">Pseudo</div>';
    	echo '<div id="forced_form_head_item">Tel Mobile</div>';
    	echo '<div id="forced_form_head_item">Adresse Email</div>';
    	echo '</div>';
    	for($i=1;$i<=10;$i++) { 
    	echo '<div id="forced_form_content">';
    	echo '<div id="forced_form_content_number">'.$i.'</div>';
    	echo '<div id="forced_form_content_item">'.$this->form->__get('forced_userPseudo_'.$i).'</div>';
    	echo '<div id="forced_form_content_item">'.$this->form->__get('forced_userMobileNumber_'.$i).'</div>';
    	echo '<div id="forced_form_content_item">'.$this->form->__get('forced_userEmail_'.$i).'</div>';
    	echo '</div>';
    	}
    	echo '<div id="forced_form_submit">'.$this->form->__get('submitforcedinscritions').'</div>';
    Mais le problème c'est que le Submit ne fonctionne pas.... ce qui me semble normal d'ailleurs mais je ne vois pas comment faire autrement.
    Donc si quelqu'un à une solution pour afficher ce formulaire correctment je suis preneur,
    et si quelqu'un sait le faire avec des décorators je suis je suis encore plus preneur !!

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    C'est pour cette raison (et aussi car je n'aime pas mélanger la vue et le controller) que j'ai créé une classe perso pour rendre le form.
    Au passage : as-tu créé les balises <form> ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Non je n'ai pas créé de balise form, je viens de m'en rendre compte, je croyais a tord que zend s'en chargé, et c'est en regardant mon code source que j'ai vu qu'il ne le créé pas...

    Il faut absolument que je j'implémente la balise form en dur dans ma vue ?
    Ou y a-t-il une autre méthode pour procéder...

    vg33-> Tu peux m'en dire un peu plus sur ta classe perso, puisque moi aussi je n'aime pas trop cette méthode mais je n'avais pas trouvé d'autre solution pour ce problème, d'habitude j'utilise les decorators pour le rendu mais là je n'arrivais pas à me débrouiller.

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par Neilime05 Voir le message
    Il faut absolument que je j'implémente la balise form en dur dans ma vue ?
    Ou y a-t-il une autre méthode pour procéder...
    De deux choses l'une :
    1) soit tu fais un echo $this->form(); et dans ce cas les balises <form> sont affichées (avec tout le reste du formulaire)
    2) soit tu restes maitre de l'affichage et tu pioches les infos nécessaires dans l'objet Zend_Form, et donc tu dois gérer toutes les balises nécessaires.

    Citation Envoyé par Neilime05 Voir le message
    vg33-> Tu peux m'en dire un peu plus sur ta classe perso, puisque moi aussi je n'aime pas trop cette méthode mais je n'avais pas trouvé d'autre solution pour ce problème, d'habitude j'utilise les decorators pour le rendu mais là je n'arrivais pas à me débrouiller.
    C'est la plus grosse classe de mon applic, soit 2200 lignes de code (avec les phpdocs quand même ). Le principe, c'est que je gère tout ce qui concerne la vue (labels, exemples, aides, css...) dans... la vue . Puis je récupère l'objet Zend_Form, et je pioche toutes les infos nécessaires : messages d'erreur, types de champs, validateurs, required, values... Par exemple, si un champ text a un validator StringLength avec un max à 80, je rajoute un maxlength="80" et un size="60", et si c'est un textarea, je rajoute un compteur de caractères restants...
    J'ai aussi des méthodes pour rajouter des champs spécifiques (champ date avec datepicker automatique par exemple), pour afficher une liste de checkbox avec boutons tout cocher / tout décocher, pour afficher une arborescence à représentation intervallaire sous forme de treeview dépliable, pour afficher certains champs dans des tableaux avec couleurs alternées, etc.
    Il est possible que l'on puisse faire tout cela avec les décorateurs, mais au démarrage (juste à la publication de Zend_Form), les décorateurs me semblaient trop complexes et pas assez adaptés à la logique métier que je souhaitais mettre en place.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Bon je vais pas me lancer dans la programmation d'une telle classe, je vais plutôt passer par les decorators pour avoir quelque chose de propre, donc si quelqu'un a déjà du faire des decorators pour présenter un form semblable au mien qu'il me fasse signe, j'aimerai bien avoir quelques exemples pour comprendre !

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    J'ai fait un formulaire de ce genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$form = new Zend_Form ();
    	// RowForm est la classe qui dérive de Zend_Form et qui te définit tes champs pour une seule ligne
            $row = new RowForm();
    	for ($i = 0; $i < $NbRows; $i++) {
    	    $newRow = clone ($row);
    	    $form->addSubForm($newRow, 'row' . $i);
    	}
    	$form->setElementDecorators(array ('ViewHelper') );
    J'utilise les subForms pour dupliquer le formulaire RowForm

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Merci Seb147 j'ai essayé cette méthode, donc j'ai créer un nouveau formulaire avec à l'intérieur ton code et sa marche nickel merci beaucoup

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Dans ce cas, n'oublie pas le tag

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    @ Seb147 : tu fais comment pour récupérer les donnée ensuite?
    Lorsque je fait un
    $request =$this->getRequest();
    $formData = $request->getPost();

    $formdata me retourne seulement la première ligne de mon formulaire

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    Je fais quelque chose comme ça aussi C'est bizarre que ça ne fonctionne pas ...

    A quoi ressemble ton code HTML généré pour ton formulaire ?

    Moi ça donne ça :

    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
     
    <table>
    <tr>
    <td>
    <input type="text" value="" id="contactManual-contactManual0-contactName" name="contactManual[contactManual0][contactName]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual0-contact" name="contactManual[contactManual0][contact]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual0-passageDate" name="contactManual[contactManual0][passageDate]" class="hasDatepicker"/></td></tr>
    <tr>
    <td>
    <input type="text" value="" id="contactManual-contactManual1-contactName" name="contactManual[contactManual1][contactName]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual1-contact" name="contactManual[contactManual1][contact]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual1-passageDate" name="contactManual[contactManual1][passageDate]" class="hasDatepicker"/></td></tr>
    <tr>
    <td>
    <input type="text" value="" id="contactManual-contactManual2-contactName" name="contactManual[contactManual2][contactName]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual2-contact" name="contactManual[contactManual2][contact]"/></td>
    <td>
    <input type="text" value="" id="contactManual-contactManual2-passageDate" name="contactManual[contactManual2][passageDate]" class="hasDatepicker"/></td></tr>
    </table>
    et la commande $this->getRequest()->getPost() me donne ça :
    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
     
    array
      'contactManual' => 
        array
          'contactManual0' => 
            array
              'contactName' => string 'TEST1' (length=5)
              'contact' => string '0123456789' (length=10)
              'passageDate' => string '07/05/2009' (length=10)
          'contactManual1' => 
            array
              'contactName' => string 'TEST2' (length=5)
              'contact' => string '0987654321' (length=10)
              'passageDate' => string '06/05/2009' (length=10)
    [...]
          'contactManual9' => 
            array
              'contactName' => string '' (length=0)
              'contact' => string '' (length=0)
              'passageDate' => string '' (length=0)
      'launch' => 
        array
          'launchType' => string 'asap' (length=4)
          'delay' => 
            array
              'delayDate' => string '' (length=0)
              'delayHour' => string '08' (length=2)
              'delayMin' => string '00' (length=2)
      'submit' => 
        array
          'Prévisualiser' => string '5' (length=1)

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    En fait il crée un formulaire pour chaque row:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form id="row1" enctype="application/x-www-form-urlencoded" method="post" action="">
    <dl class="zend_form">
    <label for="pro_userPseudo">1</label>
    <input type="text" name="pro_userPseudo" id="pro_userPseudo" value="" helper="formText" />
    <label for="pro_userMobileNumber"></label>
    <input type="text" name="pro_userMobileNumber" id="pro_userMobileNumber" value="06" helper="formText" maxlength="10" />
    <label for="pro_userEmail"></label>
    <input type="text" name="pro_userEmail" id="pro_userEmail" value="" helper="formText" />
    </dl>
    </form>

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    En regardant de nouveau mon code, je m'aperçois que la classe RowForm que je t'avais désigné dérive de Zend_Form_SubForm. J'avais noté à l'époque dans un commentaire que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*
     * On est obligé d'étendre de Zend_Form_SubForm, sinon le clonage de ce formulaire
     * pour le formulaire de saisie n'indice pas les champs
    */
    Il faut peut-être essayer comme ça ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Maintenant avec extends Zend_Form_SubForm il reconnait bien toutes les row, mais ne prend plus en comptes les valeurs contenues

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [row1] => Array
            (
                [pro_userPseudo] => 
                [pro_userMobileNumber] => 06
                [pro_userEmail] => 
            )

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    Tu peux poster ton code complet, ainsi que la trace de Zend_Debug::dump ($this->getRequest()->getPost()); ?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 186
    Par défaut
    Le code complet ca va être un peu lourd je pense
    je peux te l'envoyer en mp?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [1.x] Formulaire un peu spécial
    Par psgman113 dans le forum Symfony
    Réponses: 5
    Dernier message: 20/04/2010, 08h52
  2. Création d'un formulaire un peu spécial !
    Par magohamoth dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2006, 17h05
  3. récupérer les données d'un formulaire un peu spécial
    Par Jim_Nastiq dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 10/07/2006, 10h53
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  5. ORDER BY un peu spécial
    Par gromez dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/04/2004, 11h17

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