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