Validation des données avec CakePHP

200821/03

cakephpLa validation des données issues de formulaires est un point stratégique du développement d'un projet web.

Cette validation nécessite toujours un effort très particulier et se révèle souvent coûteuse en terme de temps et de tests.

Avec CakePHP 1.2, la validation des données devient (enfin) simple.

Valider les données avec CakePHP 1.2

 Un des points forts de CakePHP est la validation des données. Avant la version 1.2, seul 4 constantes étaient disponibles par défaut :

  • VALID_NOT_EMPTY : vérifie si un champ est non vide
  • VALID_NUMBER : vérifie si une donnée est de type numérique
  • VALID_EMAIL : vérifie si une donnée respecte la logique syntaxique d'un email
  • VALID_YEAR : vérifie si une donnée est de type YEAR

Pour toute autre donnée, il fallait faire soi-même son gateau. Avec la version 1.2 (beta à la rédaction de cet article), on apporte une belle cerise sur le gateau.

La nouvelle Class de validation  de CakePHP permet d'utiliser plus de méthodes et également de customiser ses méthodes.

Utilisation 

Afin d'utiliser le modèle de validation de données, il faut déclarer dans le modèle la variable $validate et lui passer tous les champs et règles qu'on souhaite voir appliquer à ce modèle.

Ainsi, pour valider une donnée de type url (http://), on va écrire :

  1. public $validate = array('siteweb' => array('rule' => array('url)));

 Où 'siteweb' est le champ ciblé et 'rule' indique qu'on va employer une méthode qui est ici la méthode 'url'. CakePHP se charge du reste.

Oui, mais s'il faut renvoyer un message d'erreur ? On passera alors en paramètre 'message' tel que :

  1. public $validate = array('siteweb' => array('rule' => array('url'),
  2.                               'message' => 'Veuillez saisir une url valide'
  3.                              )
  4.       );

 Ensuite, il n'est pas nécessaire dans notre vue de déclarer la variable message qui est transmise automatiquement par le controlleur à la vue.

Validation avec une méthode personnalisée

Le principe est strictement le même :

  1. public $validate = array('field' => array('rule' => array('la_methode_a_utiliser', 'param1', 'param2')));

Si cette méthode est générale, on la placera dans app_model.php, sinon dans le modèle qui en a besoin uniquement.

Par exemple, on souhaite vérifier qu'une donnée n'est pas déjà présente en base afin que le champ soit unique, comme un login, un email, etc.

Dans la class AppModel, on va déclarer la méthode suivante :

  1. function validateUnique($value, $params = array()) {
  2.         if (!empty($this->id)) {
  3.             $conditions = array($this->primaryKey => '!= '.$this->id, $params['field'] => $value);
  4.         } else {
  5.             $conditions = array($params['field'] => $value);
  6.         }
  7.         return !$this->field($this->primaryKey, $conditions);
  8.     }

Et dans notre modèle qui doit recevoir cette règle, on aurait :

  1. public $validate = array('email' =>
  2.             array(
  3.                 'rule' => 'validateUnique',
  4.                 'field' => 'email',
  5.                 'message' => 'Cet email est déjà utilisé, veuillez en choisir un autre.'
  6.             ));

 

 

 

Dernière modification : 21/03/2008

Catégorie : Développement PHP/MySQL - Framework - CakePHP - Web -

Commentaires

Ajouter un commentaire

Les champs en gras sont obligatoires.

Commentaire:

Anti-spam :
Veuillez répondre à la question suivante avant de valider votre commentaire.

La somme de 5 plus 0 est égale à