Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je cherche des infos sur le remplissage des valeurs d'un formulaire basé sur Zend_Form. Voici mon code :
controller :
$myform = new Application_Form_MyForm();
$myform->setId(12345);
$myform->setNom('coucou');
$myform->setTitre('titre');
form :
class Application_Form_MyForm extends Application_Form
{
public function _construct() { ... }
public function init() { ... }
public function getId() { ... }
public function setId() { ... }
public function getNom() { ... }
public function setNom() { ... }
public function getTitre() { ... }
public function setTitre() { ... }
}
Dans le init(), pour chaque élément du formulaire, je fais un getValeur(), par exemple pour le titre :
$titre = new Zend_Form_Element_Text('titre');
$titre
->setLabel('titre')
->setRequired(false)
->setValue($this->getTitre())
;
$this->addElement($titre);
Mais quand j'affiche le formulaire dans ma vue, j'ai le champ input 'titre' avec une valeur vide. J'ai l'impression que la fonction init() s'exécute avant mes getter (et que ceux-ci renvoient une valeur vide, puisqu'elle n'a pas encore été settée), et donc que dans mon controller, définir mes valeurs ne sert à rien (le form est déjà créé avec les valeurs vides).
Est-ce que vous pouvez m'aiguiller sur la façon de mettre les valeurs dans le formulaire (par exemple dans le cas d'une édition, je récupère les valeurs de ma bdd et je les pousse dans le formulaire) ?
J'ai vu des exemples sur le net, avec les valeurs qui sont passées par un array() dans le __construct(à, mais cela me semble moins "propre" qu'avec des setter/setter pour chacune des valeurs.
Merci pour votre aide.
Hors ligne
non utilise la méthode qui est faite pour ça.
$form->populate(array);
Ton array est un tableau à indexation par clé, dont chaque clé est identique au nom d'un de tes champs.
La méthode setValue() quant à elle met une valeur par défaut dans ton champ
Hors ligne
Merci Juch.
Il y a quelque chose qui m'échappe avec cette méthode. J'ai fait ceci :
$data = array(); // avec les clés identiques au nom des champs
$myform = new Application_Form_MyForm();
$myform->populate($data);
Si je var_dumpe $myform à ce moment, tous les champs sont vides... Est-ce normal ? Qu'est-ce que je vais mal ?
Merci
Hors ligne