Ecrit par & mots clés : Zend Framework.

forms

Zend Framework possède son propre outil pour gérer les formulaires correctement : Zend_Form est là pour ça !
Il s’agit d’une librairie qui gère vos composants de formulaires (y compris leur rendu), les validations, le filtrage des données, et la gestion de sous-formulaires.
La librairie Zend_Validate qui gère les validateurs sera aussi utiliser dans ce tutoriel afin d’illustrer les validations de formulaire et ce de façon personnalisé.

Tout d’abord nous allons voir les principes basiques des formulaires avec Zend Framework : il nous faudra ajouter un dossier « forms » dans notre répertoire « application ».

forms_folder

Voici un premier example de la création d’un formulaire dans notre fichier « Author.php ». Il s’agit d’une classe qui correspondra à un formulaire d’inscription d’un auteur :

class Form_Author extends Zend_Form
{
  /**
   * Surcharge du constructeur du formulaire
   */
  public function __construct($options = null)
  {
    parent::__construct($options = null)
    $this->setName('subscription'); // On nomme le formulaire

    $id = new Zend_Form_Element_Hidden('id'); // On rajoute un champs caché

    $email = new Zend_Form_Element_Text('email');
    $email->setRequired(true)
          ->setLabel('Veuillez saisir votre e-mail');

     // Nous avons rajouter un attribut obligatoire à notre email et nous lui avons donné un libellé avant le champs texte

    // Ensuite on peut insérer les composants (elements) dans le formulaire
    $this->addElements($id, $email);

  }
}

Nous avons réaliser une ébauche de formulaire, pour l’utiliser dans notre contrôleur et vue, rien de plus simple

AuthorController.php


function suscribeAction ()

{

$form = new Form_Author(); // On instancie le formulaire

$this->view->form = $form // On le renvoie à la vue

}

// Pour l'éditer il faut renvoyer les informations au formulaire

function editsubscriptionAction()

{

$form = new Form_Author();

$model = new Model_DbTable_Author();

$data = $model->getAuthor('5'); // On récupère toutes les données d'un auteur dans la base de données

$form->populate ($data); // On propulse les données dans le formulaire

$this->view->form = $form;

}

Ensuite dans la vue, on affiche le formulaire et on définit son action :

Author.phtml

echo $this->form;
$this->form>setAction(author/save); // On définit l'action qui récupère le formulaire

Voici un exemple beaucoup plus complet d’un formulaire avec des validateurs, internationalisation et un captcha :

<?php
class Form_Author extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('Subscription');
$id = new Zend_Form_Element_Hidden('id');

$translate = Zend_Registry::get('translate');

$emptyValidator = new Zend_Validate_NotEmpty();
$emptyValidator->setMessage($translate->_("Ce champs est vide : vous devez le compléter"));

$emailValidator = new Zend_Validate_EmailAddress();
$emailValidator->setMessage($translate->_('L'adresse email n'est pas valide'));

$primaryValidator = new Zend_Validate_Db_NoRecordExists('users', 'username');
$primaryValidator->setMessage($translate->_("L'adresse email a déjà été utilisée"), Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

$stringLengthValdiator = new Zend_Validate_StringLength(6, 12);
$stringLengthValdiator->setMessage($translate->_('La longueur du mot de pase doit être comprise entre 6 et 12 caractères'));

$email = new Zend_Form_Element_Text('email');
$email->setLabel($translate->_('Email'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emailValidator)
->addValidator($primaryValidator)
->addValidator($emptyValidator);

$password = new Zend_Form_Element_Password('password');
$password->setLabel($translate->_('mot de passe'));
$password->addValidator($stringLengthValdiator);
$password->addValidator($emptyValidator);

$password_verification = new Zend_Form_Element_Password ('password_confirm');
$password_verification->setLabel ($translate->_('retapez le mot de passe pour vérification'));
$password_verification->addValidator($emptyValidator);
if (isset($_POST['password'])) {
$passwordVerificationValidator = new Zend_Validate_Identical($_POST['password']);
$passwordVerificationValidator->setMessage($translate->_('Les mots de passe ne correspondent pas'));
$password_verification->addValidator($passwordVerificationValidator);
}

$sex = new Zend_Form_Element_Radio('sex', array('separator' => ' '));
$sex->setMultiOptions (array('male' => 'Homme', 'female' => 'Femme '))
->setLabel($translate->_('Sexe'))
-> isRequired(true);

$name = new Zend_Form_Element_Text('name');
$name->setLabel($translate->_('Prénom'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

$surname = new Zend_Form_Element_Text('surname');
$surname->setLabel($translate->_('Nom'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

$address = new Zend_Form_Element_Text('address_author');
$address->setLabel($translate->_('Adresse'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

$zip_code = new Zend_Form_Element_Text('zip_code_author');
$zip_code->setLabel($translate->_('Code Postal'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

$city = new Zend_Form_Element_Text('city_author');
$city->setLabel($translate->_('Ville'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

$phone = new Zend_Form_Element_Text('phone');
$phone->setLabel($translate->_('Téléphone'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($emptyValidator);

}

$submit = new Zend_Form_Element_Submit('valid');
$submit->setAttrib('id', 'submitbutton')
->setLabel($translate->_('Enregistrer l'annonce'));

 $this->addElements(array($id, $email,$password, $password_verification, $sex, $name, $surname, $address, $zip_code, $city, $phone, $submit));
}
}
?>

Dans le prochaine tutorial, nous verrons comment mettre en application tout ce que nous avons vu précédemment dans un « CRUD » (Create Read Update Delete) qui illustrera l’utilisateur du design-pattern MVC, Zend_Db, Zend_Form, Zend_Validate et Zend_Layout.

5 Réponses à “Zend Framework tutoriel #4 : Création de formulaire et validations avec Zend_Form et Zend_Validate”

    • Alexandre JULIEN

      En effet, j’aurais du en parler à la fin. J’ai encore quelques habitudes de Symfony qui sont restés donc pour les débutants, il est préférable d’utiliser la méthode init() au lieu de surcharger le constructeur. Cela évite notamment le « parent::__construct($options); ».

      Cela permet au moins d’illustrer comment ce construit un objet Zend_Form.

      Répondre
  1. baikhar

    merçi bien pour l’explication
    mais j’arrive pas a comprendre comment on as réalisé la connexion a la base de données
    svp si tu peu explique la connexion et en quelle fichier exactement
    merçi

    Répondre
    • admin

      Bonjour cette partie ne détaille que la création d’un formulaire et la mise en place de validateur, il ne traite pas de la partie enregistrement en base de données.
      Pour cela tu peux voir comment on interagie avec une base de données dans la partie #3 sur la couche modèle.
      Pour sauvegarder le contenu du formulaire il suffit de créer une méthode dans la classe Db_Table_Author par exemple et de créer une requête pour insérer ou mettre à jour grâce aux valeurs de ton formulaire.

      Répondre

Laissez une réponse

  • (Se sera pas publier)