Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-08-2008 19:22:54

pozowebs
Membre
Lieu: Gran Canaria
Date d'inscription: 06-07-2008
Messages: 83
Site web

[Résolu][1.5][zend_form]Multiselect et populate()

Bonjour,

normalement dans mes actions modifAction, je fais la chose suivante:

Code:

        $form = new UserForm();

        if ($this->_request->isPost()) {
...
        } else {
            // L'id de la news est attendu dans $params['id']
            $id = (int)$this->_request->getParam('id', 0);
            if ($id > 0) {
                $users = new Users();
                $user = $users->fetchRow('id='.$id);
                $form->populate($user->toArray());
            }
        }

Le populate permettant de mettre les valeurs par defaut dans le formulaire (valeurs qui sont en BDD).

Maintenant, mon problème est que j'ai un formulaire qui a (entre autre) un Zend_Form_Element_Multiselect, et je ne sais pas comment lui passer les valeurs par defaut (ces valeurs sont stockees en BDD dans une table relationnelle avec une relation manytomany par rapport a Users)...

Ou bien dois je utiliser une autre approche? merci a+

Dernière modification par pozowebs (10-08-2008 03:56:46)

Hors ligne

 

#2 10-08-2008 03:56:17

pozowebs
Membre
Lieu: Gran Canaria
Date d'inscription: 06-07-2008
Messages: 83
Site web

Re: [Résolu][1.5][zend_form]Multiselect et populate()

Bon, en fait c'est tout simple.  Le populate passe toutes les valeurs du tableau (en argument) au formulaire, donc j'ai simplement modifie mon controller afin d'aptater le contenu du tableau pour y ajouter les donnees attendues par mon multiSelect.

Dans ce cas précis, je dois ajouter un tableau de la forme $valuesTable = array ('groupeId' => array('1',5','8')) ou 'groupeId' est le nom de mon champ multiselect.

Ceci est fait simplement grace a $resArray = array_merge_recursive($user->toArray(), $valuesTable);

Code:

        $form = new UserForm();
        if ($this->_request->isPost()) {
...
        } else {
            // L'id de la news est attendu dans $params['id']
            $id = (int)$this->_request->getParam('id', 0);
            if ($id > 0) {
                $users = new Users();
                $user = $users->fetchRow('id='.$id);

                //MODIFS recuperer les valeurs pour le multiselect:
               $modelTable = new OtherModelExemple();
               $valuesTable = modelTable -> getValuesById($id);
       
               (...) 
               // A ce stade je formate correctement les valeurs de mon tableau, pour 
               // obtenir un tableau de la forme array('formElementName' => array('value1', 'value2',...))
               // exemple: $valuesTable = array ('groupeId' => array('1',5','8'))
               // ou 'groupeId' est le nom de mon champ multiselect

               // Enfin je merge ce resultat avec le premier tableau        
              $resArray = array_merge_recursive($user->toArray(), $valuesTable);                
              $form->populate($resArray);
            }
        }

Et voilà! Je vais sur ma page de modif et mon formulaire contient les valeurs par défaut qui étaient stockées en BDD, même pour mon multiSelect, où plusieurs valeurs apparaissent déjà sélectionnées. Ouf! smile

Hors ligne

 

#3 09-12-2009 12:16:53

erehcab
Membre
Date d'inscription: 17-11-2009
Messages: 63

Re: [Résolu][1.5][zend_form]Multiselect et populate()

Un grand merci à toi pour cette exemple smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages