Développement d'applications web, Zend framework, iPhone, Mac os X et Wordpress

Utiliser Zend Form sans les décorateurs

zend-frameworkL’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).

Classe Application_Form_Identify qui hérite de la classe Zend Form

Classe Application_Form_Identify qui hérite de la classe Zend Form

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 :

L'action identifierAction du contrôleur IndexController

L'action identifierAction du contrôleur IndexController

Le contenu de la vue identifier.phtml

Le contenu de la vue identifier.phtml

Voici le code html du rendu de la vue :

Code html rendu par la vue identifier.phtml

Code html rendu par la vue identifier.phtml

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 :

Vue identifier.phtml modifiée

Vue identifier.phtml modifiée

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 :

Code html de la vue modifiée

Code html 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.

Plugin flash manquant

Aucun article en relation.

Cet article a été publié dans Zend Framework avec les mots-clefs : , . Bookmarker le permalien. Laisser un commentaire ou faire un trackback : URL de trackback.

4 commentaires

  1. Settoken
    Le 2 mars 2011 à 20 h 12 min | Permalien

    mouai…
    et où sont passées les balises du formulaire ?

    • jbunel
      Le 3 mars 2011 à 12 h 27 min | Permalien

      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 >

Laisser un commentaire

Votre e-mail ne sera jamais publié ni communiqué. Les champs obligatoires sont indiqués par *

*
*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Plugin flash manquant