L’utilisation des décorateurs de formulaire dans Zend Framework peut être un casse tête et il est difficile d’arriver à ces fins surtout lorsqu’on est un débutant. Une des solutions peut être de désactiver les décorateurs de formulaire et de construire le rendu directement dans une vue.
La première chose consiste à créer une classe qui hérite de Zend Form. Je créé donc ma classe « Application_Form_Identify » qui sera un simple formulaire d’identification. Elle est composée de trois éléments : un élément de type text (Zend_Form_Element_Text), un élément de type Password (Zend_Form_Element_Password) et un élement de type submit (Zend_Form_Element_Submit).
Vous remarquerez que j’ai commenté la ligne setDisableLoadDefaultDecorators(true) qui permet de désactiver les décorateurs de formulaire.
Voici ma l’action de mon contrôleur et ma vue correspondante :
Voici le code html du rendu de la vue :
Nous pouvons voir toutes les balises que les décorateurs de formulaire ajoutent. (<dd></dd><dl></dl><dt></dt>). Pour éviter d’utiliser les décorateurs de formulaire, il faut les désactiver grâce à la méthode setDisableLoadDefaultDecorators(true) (celle que j’ai commenté juste avant). Lorsque nous rafraichissons notre page, le formulaire a disparu.
En effet maintenant que les décorateurs ne sont plus actifs, il faut afficher chaque élément manuellement. Pour cela nous allons modifier la vue comme ceci :
Comme vous pouvez le voir, j’utilise deux fonctions ici :
- La première renderLabel() qui permet d’afficher le label d’un élément.
- La deuxième renderViewHelper() permet d’afficher l’élément de type input. Dans le cas ou un élément de type File est utilisé, nous ferons appelle à la méthode renderFile() à la place de renderViewHelper().
Voici le rendu de la vue modifiée :
Grâce a cette méthode il est possible d’entourer n’importe quel élément d’une balise html ou d’une classe CSS afin d’avoir une mise en forme parfaite sans s’arracher les cheveux sur l’apprentissage des décorateurs de formulaire du Zend Framework.
Aucun article en relation.






4 commentaires
mouai…
et où sont passées les balises du formulaire ?
Oui en effet j’ai oublié de mettre les balises form dans mon exemple.
Il faudrait faire comme ceci :
< form
action="escape($this->form->getAction()); ?>"
method="< ?php echo $this->escape($this->form->getMethod()); ?>"
enctype="< ?php echo $this->escape($this->form->getEnctype()); ?>" >
Mettre les champs souhaités à l'intérieur.
< / form >
Ok ben du coup j’ai trouvé un autre moyen.
J’ai posté ça sur z-f.fr
Par contre ta méthode semble plus souple si on veux intercaler des éléments entre les inputs.
voici le lien en dur
http://www.z-f.fr/forum/viewtopic.php?pid=31667#p31667