Zend_Form : LE composant de formulaire

Zend_Form : LE composant de formulaire

Les formulaires sont les composants essentiels dans les applications Web. Souvent, ils permettent d’apporter une solution rapide à des problèmes simples de collectes de données. Le Zend Framework met à la disposition des développeurs un composant puissant qui permet de déployer rapidement des formulaires : c’est le composant Zend_Form.

Présentation

Zend_Form simplifie la création et la gestion des formulaires dans vos applications Web.

Il permet de répondre aux besoins suivants :

Mon premier formulaire

Créer un objet formulaire

La création d’un formulaire est des plus simples, il suffit d’instancier la classe Zend_Form. Classiquement, on définit l’action du formulaire et la méthode d’envoi des données via les setters mis à la disposition du développeur.

 
setAction('/')->setMethod('post') 

A l’instar de la balise HTML form, Zend_Form est un container d’élément de Zend_FormElement*. Par défault, Zend_Form utilisent les helpers définit dans Zend_View pour le rendu des éléments.

On trouve les éléments les plus classiques du Web (button, checkbox, hidden, image, password, radio, reset, select, submit, text, textarea). L’ajout d’élément au formulaire est des plus élémentaires, le code ci-dessous se passe de commentaires vu sa simplicité.

 
addElement(new Zend_Form_Element_Text('username')); 
// Via la forme textuelle 
$form->addElement('text', 'username'); 

Validation des données

Le Zend Framework dispose d’un composant de validation des données. C’est Zend_Validate. On trouve des validateurs pour les données les plus classiques que l’on trouve sur les sites Web.

Il fournit 4 validateurs un peu spéciaux qui permettent de vérifier le contenu d’un fichier sitemap. Ce sont les validateurs Sitemap_Changefreq, Sitemap_Lastmod, Sitemap_Loc, Sitemap_Priority.

Par exemple, si l’on veut vérifier que notre élément username a une taille comprise entre 8 et 12 caractères, on écrira le code suivant :

<?php>
$validator = new Zend_Validate_StringLength(array(‘min’ => 8, ‘max’ => 12)); $validator->setMessages(array(
    Zend_Validate_StringLength::TOO_SHORT => ‘La chaîne \‘%value%\’ est trop courte’, Zend_Validate_StringLength::TOO_LONG => ‘La chaîne \‘%value%\’ est trop longue’
));
$username->addValidator($validator);

Cette exemple montre également qu’il possible de personalisé les différents messages d’erreurs. Comme pour les éléments, on peut passer par une forme courte

 
addValidator('regex', false, array('/^[a-z]/i')); 

Il est également possible de chainer plusieurs validateurs ou définir ces propres validateurs en étendant la classe abstraite Zend_Validate_Abstract. A noter également, la présence de la méthode setRequired() qui permet de vérifier la présence d’un valeur lors de la soumission d’un formulaire. Pour vérifier, si un formulaire passe l’ensemble des critères de validation, il suffit d’appeller la méthode isValid().

 
isValid($_POST)) { 
    // failed validation 
} 

Le filtrage des données

Il est souvent utiles de filtrés les données avant de les soumettre à la validation. Encore une fois, le Zend Framework propose un composant près à l’emploi. Son fonctionnement est très proche des validateurs, et on trouve également un certains nombres de filtres prédéfinis qui correspondent aux besoins les plus classiques.

A l’instar des validateurs, les différents filtre peuvent être chainés pour définir des filtres plus puissants. On peut également définir des filtres personnalisés en implémentant l’interface Zend_Filter_Interface. Si l’on revient à notre exemple, on peut avoir un code du genre :

<?php
$username
    ->addValidator('alnum')
    ->addValidator('regex', false, array('/^[a-z]/')) 
    ->setRequired(true) 
    ->addFilter('StringToLower'); 

Affichage d'un formulaire

L’affichage d’un formulaire est l’opération la plus simple. La plupart des éléments nécessitent les aides de vue Zend_View pour être rendus.

<?php
// Appel explicite de render() : 
echo $form->render($view); 
// Supposant que setView() avec passage d'un objet Zend_View a été appelée avant : 
echo $form; 

Le rendu des formulaires est basé sur des décorateurs, chaque élément d’un formulaire possède un décorateur et le formulaire lui-même. Leurs rôles est d’assurer le rendu des éléments en eux-même mais aussi des messages d’erreurs des labels, du caractère obligatoire d’un champs, … . Dans le cadre d’application Web, les décorateurs par défaut basé sur les listes de définitions (Zend_Form_Decorator_DtDdWrapper), mais il existe d’autre décorateur disponible en standard, et comme dans toutes applications basés sur la programmation orienté objet, il est parfaitement possible de définir ces propres décorateurs.

Apport d'une approche orienté objet

Comme on l’a vu, la définition d’un élément peut devenir rapidement complexe et fastidieuse lorsque les filtres, les validateurs et les décorateurs deviennent nombreux.

L’héritage permet de factoriser de nombreuse partie de code redondant pour obtenir un code qui soit plus lisible et plus facilement maintenable. Les fichiers ini tel qu’ils sont utilisés par le composant Zend_Config offre une autres voix pour la réutilisation et la factorisation de code. Notre formulaire aurait pu être décrit dans un fichier ini

[form] 

name = "registration" 

action = "/user/register" 

method = "post" 

elements.username.type = "text" 

elements.username.options.label = "Username"

elements.username.options.validators.alpha.validator = "Alpha"

elements.username.options.filters.lcase = "StringToLower" 

L’instanciation du formulaire est aurait donc pris la forme suivante :

<?php
$form = new Zend_Form(new Zend_Config_Ini('chemin/vers/ini', 'form'); 
// ... 

Cette article n’est qu’un aperçu des fonctionnalités proposé par ce composant mais elle permet deja de se rendre compte combien Zend_Form peut accélérer la production de formulaire dans les applications Web en dehors de toute application MVC.

comments powered by Disqus

Voir aussi

Changement Autoload avec le Zend Framework 1.8

Changement Autoload avec le Zend Framework 1.8

Dans la documentation du Zend Framework, il est indiqué que pour utiliser l’autoload du composant Zend_Loader, il suffit d’utiliser la …

CMS basé sur des frameworks

CMS basé sur des frameworks

Le début des années 2000 à marqué l’avènement des CMS. A cette époque, il pouvait être considéré comme les seules solutions viables pour des …

Zend Framework 1.9 : compatible avec PHP 5.3 et PHP 5.2

Zend Framework 1.9 : compatible avec PHP 5.3 et PHP 5.2

La “PHP Company” Zend sort la cinquième version de son célèbre framework en moins de 2 ans d’existence. Cette version apporte son …

Présentation du Zend Framework

Présentation du Zend Framework

Le Zend Framework est un framework open-source prévu pour le développements d’applications web et de services web avec PHP 5. Le Zend Framework …

A la une
  • Rencontre du numérique 2019 - Nîmes
  • référencement naturel d'un hôtel
  • Développeur eZ Platform
  • Tech lead Symfony
  • Expert Qualité Web

Copyright - Sylvain FIX

2009 - 2019