Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Je voulais créer une classe qui s'occupe de mes formulaire qui hérite de zend_Form
Voici le model :
class FormulaireAlbum extends Zend_Form {
    
    public function __construct($option = NULL) {
        
        parent::setName('album');
        $id = new Zend_Form_Element_Hidden('id');
        $artist = new Zend_Form_Element_Text('artist');
        $artist->setLabel('Artist')
                ->setRequired(true)
                ->addValidator('NotEmpty');        
                
        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('Titre')
                ->setRequired(true)
                ->addValidator('NotEmpty');
        $this->addElement($title);        
                
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Ajouter');
        $submit->setAttrib('id', 'submitbutton');
        $this->addElement($id);
        $this->addElement($artist);
        $this->addElement($submit);
        
    }
}dans le controlleur :
            
            $editForm = new FormulaireAlbum();
            $this->view->editForm = $editForm;sauf que dans la vue quand je met echo $this->editForm; ça m'affiche rien !!
Quelqu'un à une idée, Merci.
Dernière modification par Mr.MoOx (12-08-2009 11:51:02)
Hors ligne
Il faut des décorateurs. Ce sont eux qui gèrent le rendu visuel du formulaire.
Hors ligne
Salut, 
Dans ton controller $editForm est bien implémenté?
Peux-tu tester ta variable avec Zend_debug::Dump() dans ton controller?
Hors ligne
Justement, sauf que là, il a surchargé le contructeur de Zend_Form donc il a supprimé tout ce qui définissait les décorateur par défaut et toute la configuration de base de la classe. Il suffit de voir le constructeur de Zend_Form pour s'en convaincre :
    /**
     * Constructor
     *
     * Registers form view helper as decorator
     * 
     * @param mixed $options 
     * @return void
     */
    public function __construct($options = null)
    {
        if (is_array($options)) {
            $this->setOptions($options);
        } elseif ($options instanceof Zend_Config) {
            $this->setConfig($options);
        }
        // Extensions...
        $this->init();
        $this->loadDefaultDecorators();
    }Donc il faut soit appeler le constructeur parent avec les paramètres qui vont bien.
parent::__construct(...);
Ou alors, tu n'utilises pas le constructeur pour créer ton formulaire mais la méthode init() dans laquelle tu place ton code. Ce qui est à mon avis une bien meilleur manière de faire à moins de vouloir modifier le comportement du constructeur. La méthode init() est faite pour étendre Zend_Form.
Egalement, ça :
parent::setName(...);
à replacer par :
$this->setName(...);
A moins de vouloir explicitement appeler la méthode de la classe parent. Ce qui est à mon avis n'est pas une bonne idée.
A+
Hors ligne
Thx every body,
oui, il a fallu que j'ajoute 
$this->loadDefaultDecorators();
à la classe.
Hors ligne
Ce qui est toujours une très mauvaise manière de faire... ![]()
Hors ligne
![]()
Je pense que ton code pourrai fonctionner comme ça:
 public function __construct($option = NULL) {
        parent::__construct($option);
        parent::setName('album');
        $id = new Zend_Form_Element_Hidden('id');
        $artist = new Zend_Form_Element_Text('artist');
        $artist->setLabel('Artist')
                ->setRequired(true)
                ->addValidator('NotEmpty');        
                
        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('Titre')
                ->setRequired(true)
                ->addValidator('NotEmpty');
             
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Ajouter');
        $submit->setAttrib('id', 'submitbutton');
$this->addElements(array( $id,$artist, $title,$submit));
        
    }
}Fuse
Dernière modification par _Fuse_ (12-08-2009 12:09:10)
Hors ligne