Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
normalement dans mes actions modifAction, je fais la chose suivante:
$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
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);
$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!
Hors ligne
Un grand merci à toi pour cette exemple
Hors ligne
Pages: 1