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