Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-06-2012 15:35:39

Neka
Membre
Date d'inscription: 19-06-2012
Messages: 13

[Résolu][Zend_Form] Liste déroulante reliée à la base de données

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

Code:

            $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

Code:

    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

 

#2 19-06-2012 16:15:19

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Résolu][Zend_Form] Liste déroulante reliée à la base de données

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

Code:

$this->TPersonne

fais un zend_debug:

Code:

Zend_Debug::dump($this->TPersonne)

.

Dernière modification par amiss (19-06-2012 16:16:49)

Hors ligne

 

#3 19-06-2012 16:38:31

Neka
Membre
Date d'inscription: 19-06-2012
Messages: 13

Re: [Résolu][Zend_Form] Liste déroulante reliée à la base de données

je viens d'essayer ce code :       

   

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

Code:

<table>
    <tr>
        <th>Id</th>
        <th>Nom</th>
        <th>Prenom</th>
        <th>Mdp</th>
        <th>Zone</th>
        <th>&nbsp;</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

 

#4 19-06-2012 17:26:59

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Résolu][Zend_Form] Liste déroulante reliée à la base de données

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:

Code:

 
$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

Code:

$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

 

#5 19-06-2012 21:47:02

Neka
Membre
Date d'inscription: 19-06-2012
Messages: 13

Re: [Résolu][Zend_Form] Liste déroulante reliée à la base de données

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.


Code:

    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

 

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