Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-05-2010 10:55:02

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

[résolu] Probleme sur Zend Form

Bonjour,
j'ai un souci avec mon formulaire.
En effet, celui-ci ne veut pas s'afficher dans ma vue, mais par contre, j'arrive à afficher les éléments individuellements.

Je vous fournis ci joint les différents bouts de code :

L'action index de mon controlleur :

Code:

public function indexAction()
    {
        // action body
        $etb_id = $this->_getParam('etb_id');
        
        $formDefinePeriodes    = new Application_Form_DefinePeriodes();
        $formEtatPeriodes    = new Application_Form_EtatPeriodes();
        $formNotation        = new Application_Form_Notation();
        $formDefineLangues    = new Application_Form_DefineLangues(array('1234' => 'Anglais', '5678' => 'Allemand'));
        
        
        $this->view->notation = $formNotation;
        $this->view->definePeriodes = $formDefinePeriodes;
        $this->view->etatPeriodes = $formEtatPeriodes;
        $this->view->langues = $formDefineLangues;
        $this->view->etbid = $etb_id;
    }

Alors oui, je définis plusieurs formulaire, car ils s'affichent sous forme de tabs dans ma vue.
Alors le formulaire qui me pose problème, c'est $formDefineLangues
Je veux pouvoir lui passer un tableau en paramètre comme vous pouvez le constater.
Je l'ai défini en statique pour le moment pour les tests, mais il sera ensuite dynamique.

Le formulaire maintenant :

Code:

class Application_Form_DefineLangues extends Zend_Form
{
    protected $_langues;
    
    public function __construct(array $langues)
    {
        $this->_langues = $langues;
        
        $this->setMethod('post');
        
        $element = new Zend_Form_Element_MultiCheckbox('langues', array(
            'label' => 'Sélectionner les matières étant des langues',
            'multiOptions' => $langues
        ));
        $this->addElement($element);
        
        /*
        $this->addElement('multicheckbox', 'langues', array(
            'label' => 'Matières étant des langues',
            'multiOptions' => 
            
        ));*/
        
        
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Valider');
        $this->addElement($submit);
        
        
        $this->addElement('hash', 'csrf', array(
            'ignore'    => true,
        ));
        
    }
    
    public function init()
    {
        /* Form Elements & Other Definitions Here ... */
        
    }
    

    
    public function printArray() {
        foreach($this->_langues as $key => $value) {
            echo 'ID : '.$key.' ; Nom : '.$value."</br>";
            
        }
        
    }
}

J'ai fait une fonction printArray() histoire de vérifier que ma variable était bien renseigné (c'est le cas, il me ressort bien mon tableau :p

et dans ma vue :

Code:

<div id="tabs-3">
                            <?php 
                            $this->langues->setAction($this->url());
                            echo $this->langues;
                            ?>
                        
                        </div>

Les autres formulaire que j'ai dans mon controlleur eux s'affichent sans problèmes à d'autres endroits de la vue, mais celui là ne s'affichent pas.
Par contre, si je fais echo $this->langues->langues; , mon élément multicheckbox apparait bien.

Et là, je sais pas trop quoi faire.
Je sais pas si il faut que je rajoute quelque chose dans la partie init() ou pas, ou j'en sais rien :p

Je suis sur que pour vous c'est pas grand chose, juste une ou deux lignes qui doit manquer, mais j'arrive pas à trouver moi.

Dernière modification par Wiinner (25-05-2010 11:42:59)

Hors ligne

 

#2 25-05-2010 11:29:49

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [résolu] Probleme sur Zend Form

Hello,

C'est parce que tu étends le constructeur. Utilises la méthode init() pour faire ça, c'est son but.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 25-05-2010 11:30:48

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [résolu] Probleme sur Zend Form

A mon avis tu as pas chargé les décorateurs de ton formulaire.

Essaie d'appeler parent::__construct() dans ton constructeur...

Initialiser les éléments dans __construct(), je sais pas ce que Zend en dit mais moi je le fais dans la méthode init() et je passe des options uniquement dans le constructeur.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#4 25-05-2010 11:32:52

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [résolu] Probleme sur Zend Form

Ils sont ou tes décorateurs ??

Si tu redéfinis __construct et que tu n'installes pas de décorateur, tu ne verras rien.
Le __construct de Zend_Form install des décorateurs par défaut pour toi.

Je ne vois nullpart d'appel à parent::__construct ou bien $this->loadDefaultDecorators()


EDIT : a priori, on s'est entreTROISé smile

Dernière modification par nORKy (25-05-2010 11:34:11)


----
Gruiiik !

Hors ligne

 

#5 25-05-2010 11:42:27

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: [résolu] Probleme sur Zend Form

Merci à tous, çà marche.
par contre, j'ai préféré garder la surcharge du constructeur, car dès que je passe tout çà dans la fonction init, il me fait des erreurs du style :

Catchable fatal error: Argument 1 passed to Zend_Form_Element_Multi::setMultiOptions() must be an array, null given

Pour info, j'avais mis :

Code:

class Application_Form_DefineLangues extends Zend_Form
{
    protected $_langues;
    
    /*
    public function __construct(array $langues)
    {
        parent::__construct();
         
        $this->_langues = $langues;
        
        
    }*/
    
    public function init(array $langues)
    {
        /* Form Elements & Other Definitions Here ... */
        $this->setMethod('post');
        
        $element = new Zend_Form_Element_MultiCheckbox('langues', array(
            'label' => 'Sélectionner les matières étant des langues',
            'multiOptions' => $langues
        ));
        $this->addElement($element);
        
        /*
        $this->addElement('multicheckbox', 'langues', array(
            'label' => 'Matières étant des langues',
            'multiOptions' => 
            
        ));*/
        
        
        $submit = new Zend_Form_Element_Submit('submit');
        //$submit->setAttrib('onclick', 'parent.tb_remove();parent.go_reload(true)');
                $submit->setLabel('Valider');
        $this->addElement($submit);
        
        
        $this->addElement('hash', 'csrf', array(
            'ignore'    => true,
        ));
        
    }

Y a-t-il donc moyen de passer des paramètres à la fonction init ?

Mais bon, sinon, en faisant la surcharge du constructeur çà marche.
Merci pour le coup des décorateurs.
Pour le moment, j'en avais pas encore eu besoin, car je faisais des formulaires basiques, en passant justement directement par init(), et visiblement, il devait faire appel tout seul dans le constructeur par default l'appel au décorateur :p

Je met en résolu mais par contre, je suis toujours preneur pour savoir comment faire en passant directement par init :p Je trouverais çà plus joli en effet wink

Hors ligne

 

#6 25-05-2010 12:07:27

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: [résolu] Probleme sur Zend Form

Bon bah du coup, je me réponds à moi même :p

Alors en fait, il y a des appels qui se font vers des setters de manières automatiques
http://www.zfforums.com/zend-framework- … -4178.html

Voila d'ou j'ai vu çà.
Donc du coup dans mon controlleur je fais :

Code:

$formDefineLangues    = new Application_Form_DefineLangues(array('langues' => array('1234' => 'Anglais', '5678' => 'Allemand')));

Donc j'ai un tableau avec pour $key : langues.
Donc ca va automatiquement appeler dans mon form le setter setLangues

Dans mon form j'ai donc :

Code:

    public function setLangues($array) {
        $this->_langues = $array;
    }

 public function init()
    {
        /* Form Elements & Other Definitions Here ... */
        $this->setMethod('post');
        
        $element = new Zend_Form_Element_MultiCheckbox('langues', array(
            'label' => 'Sélectionner les matières étant des langues',
            'multiOptions' => $this->_langues
        ));
        $this->addElement($element);
        
        /*
        $this->addElement('multicheckbox', 'langues', array(
            'label' => 'Matières étant des langues',
            'multiOptions' => 
            
        ));*/
        
        
        $submit = new Zend_Form_Element_Submit('submit');
        //$submit->setAttrib('onclick', 'parent.tb_remove();parent.go_reload(true)');
                $submit->setLabel('Valider');
        $this->addElement($submit);
        
        
        $this->addElement('hash', 'csrf', array(
            'ignore'    => true,
        ));
        
    }

Voila :p

Hors ligne

 

#7 25-05-2010 13:05:32

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [résolu] Probleme sur Zend Form

Hello,

C'est exactement la forme préconisée wink

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

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