peLmeL.org
Accueil du site > peLmeL Blog > Copix > Utilisation des validateurs sur Copix : Partie 1

Utilisation des validateurs sur Copix : Partie 1

mardi 21 octobre 2008, par Brice Favre


Depuis Copix 3.0.3 sont apparus les validateurs permettant de valider des données de façon automatique. Ce premier article à pour but de présenter les validateurs simples et composites, comment les utiliser et les intégrer dans votre code. Prochainement je vous expliquerai comment créer des classes de validateurs.

Objectifs

À partir un formulaire simple contenant Nom, Prénom, date de naissance, numéro de téléphone, j’aimerais pouvoir le valider, et renvoyer un message d’erreur si les informations ne sont pas correctement remplies. Pour commencer je créé le template, default.form.php, de la page contenant le formulaire.

  1. <form action="<?php echo _url ("module|default|valid");?>">
  2. Nom : <input type="text" name="nom"/><br/>
  3. Prénom : <input type="text" name="prenom"/><br/>
  4. Date de naissance : <input type="text" name="datenaissance"/><br/>
  5. Téléphone : <input type="text" name="telephone"/><br/>
  6. </form>

Le fichier est placé dans répertoire templates de mon module. Il ne reste plus qu’à l’intègrer dans mon contrôleur par défaut, fichier actiongroups/default.actiongroup.php du module, méthode processDefault  :

  1. public function processDefault(){
  2.     $ppo = new CopixPPO ();
  3.     return _arPPO ($ppo, 'default.form.php');
  4. }

Je crée maintenant une procédure qui va vérifier si Nom et Prénom sont des chaînes de caractères, la date de naissance est une date et le téléphone un téléphone. Copix met à ma disposition à travers son mécanisme de validateurs tous les éléments pour le faire.

Solutions avec des validateurs simples

En passant par des validateur simple, on valide toutes les valeurs individuellement en utilisant le raccourci _validator () ; comme ceci :

  1. $arError = array();
  2. if (_validator ('notempty')->check (_request('nom')) !== true){
  3.     $arError[] = "Nom de l'utilisateur obligatoire";
  4. }
  5.  
  6. if (_validator ('notempty')->check (_request('prenom')) !== true){
  7.     $arError[] = "Prénom de l'utilisateur obligatoire";
  8. }
  9.  
  10. if (_validator ('date')->check (_request('date')) !== true){
  11.     $arError[] = "Erreur sur la date de naissance";
  12. }

Il possible de valider une valeur à l’aide de plusieurs validateurs, par exemple pour vérifier qu’une valeur est bien remplie. On utilise dans ce cas les validateurs composites. Par exemple pour tester que votre téléphone est bien rempli et correspond à un numéro de téléphone il convient de faire :

  1. if (_cValidator ()->attach (_validator ('notEmpty'))
  2.                    ->attach (_validator ('phone'))->check (_request('telephone')) !== 'true'){   
  3.         $arError[] = 'Erreur sur le téléphone';
  4. }

Le code ainsi réalisé permet de créer le tableau d’erreur qui peut être affiché très simplement dans un template.

Depuis l’actiongroup il suffit de renvoyer le tableau d’erreur dans un objet PPO et passer celui ci au template :

  1. $ppo = new CopixPpo ();
  2. $ppo->errors = $arError;
  3. return _arPpo ($ppo, 'default.form.php');

Une simple boucle dans le template permettra d’afficher les erreurs.

  1. <?php
  2. if (isset ($ppo->errors)){
  3.         echo '<h2>'._i18n ('validator_copix.form.error').'</h2>';
  4.         _etag ('ulli', array ('values'=>$ppo->errors));
  5. }
  6. ?>

Dans mon code, j’utilise le même template pour afficher à la fois le formulaire et les erreurs, ce qui permet à l’utilisateur de ne pas avoir à faire de clics supplémentaires.

La suite

A partir de cet article vous pouvez désormais utiliser des validateurs au sein de vos traitements de formulaires.

Pour se faciliter la vie et permettre d’étendre plus simplement l’étendue de nos vérifications, il est aussi possible (et souvent préférable) de créer un seul validateur qui permettra de vérifier l’ensemble des variables de votre formulaire. C’est ce que nous verrons, dans un prochain article.

Si vous avez des questions ou des remarques, n’hésitez pas à les poster sur le forum Copix.

Répondre à cet article


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette