Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'ai un soucis sur mon formulaire j'ai une erreur sur ma liste déroulante qui est relié à ma base de données.
Personne(id_personne, ...,#id_type)
Type(id_type, nom_type)
FORM
$listOptions = array(); foreach($this->TPersonne as $personne) { $listOptions[$personne->id_type] = $personne->id_type; } $type= new Zend_Form_Element_Select('id_type'); $type->setLabel('Type : ') ->setMultiOptions($listOptions);
SCREAM: Error suppression ignored for
( ! ) Warning: Invalid argument supplied for foreach() in ...
Je ne comprends pas à quoi peut être lié mon erreur.
CONTROLLER
function modifierAction() { $form = new Application_Form_ModifierPersonne(); $form->envoyer->setLabel('Sauvegarder'); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $id = $form->getValue('id_personne'); $nom = $form->getValue('nom_personne'); $prenom = $form->getValue('prenom_personne'); $mdp = $form->getValue('prenom_personne'); $type = $form->getValue('id_type'); $personnes = new Application_Model_DbTable_TPersonne(); $personnes->modifierPersonne($id, $nom, $prenom, $mdp, $type); $this->_helper->redirector('index'); } else { $form->populate($formData); } } else { $id = $this->_getParam('id_personne', 0); if ($id > 0) { $personnes = new Application_Model_DbTable_TPersonne(); $form->populate($personnes->obtenirPersonne($id)); } }
J'aimerai aussi pouvoir afficher le nom de la zone et pas l'id
Dernière modification par Neka (19-06-2012 21:54:22)
Hors ligne
Bonjour,
ton erreur vient du fait que ta boucle foreach ne parcours pas un tableau (dans ton cas $this->TPersonne).Pour voir ce que contient
$this->TPersonne
fais un zend_debug:
Zend_Debug::dump($this->TPersonne)
.
Dernière modification par amiss (19-06-2012 16:16:49)
Hors ligne
je viens d'essayer ce code :
foreach(Zend_Debug::dump($this->TPersonne) as $personne) { $listOptions[$personne->id_type] = $personne->id_type;
toujours la même erreur
SCREAM: Error suppression ignored for
( ! ) Warning: Invalid argument supplied for foreach() in
Ca affiche en plus null au dessus de mon formulaire
Sinon sur mon index.phtml ce code fonctionne très bien
<table> <tr> <th>Id</th> <th>Nom</th> <th>Prenom</th> <th>Mdp</th> <th>Zone</th> <th> </th> </tr> <?php foreach($this->TPersonne as $personne) : ?> <tr> <td><?php echo $this->escape($personne->id_personne);?></td> <td><?php echo $this->escape($personne->nom_personne);?></td> <td><?php echo $this->escape($personne->prenom_personne);?></td> <td><?php echo $this->escape($personne->mdp_personne);?></td> <td><?php echo $this->escape($personne->id_type);?></td> <td> </td> </tr> <?php endforeach; ?> </table>
Dernière modification par Neka (19-06-2012 17:00:25)
Hors ligne
en fait Zend_Debug est l'équivalent de var_dump en php qui affiche les informations d'une variable(type, valeur).Si je t'ai dit de faire Zend_Debug c'est pour voir ce que contient l'objet $this->TPersonne qui a priori devrait être un tableau.
exemple d'utilisation de zend_debug:
$atb=array('toto','tita','tata'); Zend_Debug::dump($tab);
Pour résoudre ton problème, voici comment s'y prendre pour passer un tableau d'objet issue de la bd au select du form:
dans la class FORM
$listOptions = array(); $personnes = new Application_Model_DbTable_TPersonne(); foreach($personne->fetchAll() as $personne){ $listOptions[$personne->id_type] = $personne->id_type; } $type= new Zend_Form_Element_Select('id_type'); $type->setLabel('Type : ') ->setMultiOptions($listOptions);
le principe consiste à faire une requête select sur la table personne puis itérer sur le résultat de cette requête afin de le stocker dans un tableau.
Dernière modification par amiss (19-06-2012 17:33:13)
Hors ligne
Merci amiss,
après ça me fait bizarre de faire un new alors que pour les autres champs je n'en ai pas eut besoin.
Je tâtonne et je ne comprends pas toujours ce que je fais exactement malheureusement.
J'ai aussi modifié pour qu'on puisse voir le nom du type et plus l'id.
Je vais me renseigner sur l'équivalent du "selected" en html.
public function init() { $this->setName('personne'); $id = new Zend_Form_Element_Hidden('id_personne'); $id->addFilter('Int'); $mdp = new Zend_Form_Element_Hidden('mdp_personne'); $nom = new Zend_Form_Element_Text('nom_personne'); $nom->setLabel('Nom : ') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $prenom = new Zend_Form_Element_Text('prenom_personne'); $prenom->setLabel('Prenom : ') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $listOptions = array(); $personnes = new Application_Model_DbTable_TPersonne(); foreach($personnes->fetchAll() as $personne){ $listOptions[$personne->id_type] = $personne->getType()->nom_type; } $type= new Zend_Form_Element_Select('id_type'); $type->setLabel('Type : ') ->setMultiOptions($listOptions);
Dernière modification par Neka (19-06-2012 21:53:38)
Hors ligne
Pages: 1