CakeFest #3: July 9-12 2009 Berlin!

4.1 Validation des données

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

La validation des données est une partie importante de toute application, puisqu'elle permet de s'assurer que les données d'un modèle respectent les règles métiers de l'application. Par exemple, vous aimeriez vérifier que les mots de passe sont longs d'au moins huit caractères ou bien vous assurer que les noms d'utilisateurs sont uniques. La définition des règles de validation facilite grandement la gestion des formulaires.

Il y a de nombreux aspects différents dans le processus de validation. Ce que nous aborderons dans cette section c'est le côté modèle des choses. En résumé : ce qui se produit lorsque vous appelez la méthode save() de votre modèle. Pour obtenir plus d'informations sur la manière d'afficher les erreurs de validation, regardez la section traitant du Helper "Form".

La première étape pour la validation de données est de créer les règles dans le Modèle. Pour ce faire, utilisez le tableau Model::validate dans la définition du modèle, par exemple :

<?php
class Utilisateur extends AppModel {  
    var $name = 'Utilisateur';
    var $validate = array();
}
?>
  1. <?php
  2. class Utilisateur extends AppModel {
  3. var $name = 'Utilisateur';
  4. var $validate = array();
  5. }
  6. ?>

Dans l'exemple ci-dessus, le tableau $validate est ajouté au modèle Utilisateur, mais ce tableau ne contient pas de règles de validation. En supposant que la table "utilisateurs" ait les champs "login", "mot_de_passe", "email" et "date_de_naissance", l'exemple ci-dessous montre quelques règles simples de validation qui s'appliquent à ces champs :

<?php
class Utilisateur extends AppModel {
    var $name = 'Utilisateur';
    var $validate = array(
        'login' => 'alphaNumeric',
        'email' => 'email',
        'date_de_naissance' => 'date'
    );
}
?>
  1. <?php
  2. class Utilisateur extends AppModel {
  3. var $name = 'Utilisateur';
  4. var $validate = array(
  5. 'login' => 'alphaNumeric',
  6. 'email' => 'email',
  7. 'date_de_naissance' => 'date'
  8. );
  9. }
  10. ?>

Ce dernier exemple montre comment des règles de validation peuvent être ajoutées aux champs d'un modèle. Pour le champ 'login', seules les lettres et les chiffres sont autorisés, l'email doit être valide et la date de naissance doit être une date valide. La définition de règles de validation active l'affichage "automagique" de messages d'erreurs dans les formulaires par CakePHP, si les données saisies ne respectent pas les règles définies.

CakePHP a de nombreuses règles et leur utilisation peut être très simple. Certaines de ces règles intégrées vous permettent de vérifier le format des adresses emails, des URLs, des numéros de carte de crédit, etc. - mais nous couvrirons cela en détail plus loin.

Voici un autre exemple de validation plus complexe qui tire avantage de quelques-unes de ces règles pré-définies :

<?php
class User extends AppModel {
    var $name = 'User';
    var $validate = array(
        'login' => array(
            'alphanumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Chiffres et lettres uniquement !'
                ),
            'between' => array(
                'rule' => array('between', 5, 15),
                'message' => 'Entre 5 et 15 caractères'
            )
        ),
        'mot_de_passe' => array(
            'rule' => array('minLength', '8'),
            'message' => '8 caractères minimum'
        ),
        'email' => 'email',
        'date_de_naissance' => array(
            'rule' => 'date',
            'message' => 'Entrez une date valide',
            'allowEmpty' => true
        )
    );
}
?>
  1. <?php
  2. class User extends AppModel {
  3. var $name = 'User';
  4. var $validate = array(
  5. 'login' => array(
  6. 'alphanumeric' => array(
  7. 'rule' => 'alphaNumeric',
  8. 'required' => true,
  9. 'message' => 'Chiffres et lettres uniquement !'
  10. ),
  11. 'between' => array(
  12. 'rule' => array('between', 5, 15),
  13. 'message' => 'Entre 5 et 15 caractères'
  14. )
  15. ),
  16. 'mot_de_passe' => array(
  17. 'rule' => array('minLength', '8'),
  18. 'message' => '8 caractères minimum'
  19. ),
  20. 'email' => 'email',
  21. 'date_de_naissance' => array(
  22. 'rule' => 'date',
  23. 'message' => 'Entrez une date valide',
  24. 'allowEmpty' => true
  25. )
  26. );
  27. }
  28. ?>

Deux règles de validation sont définies pour le login : il doit contenir des lettres et des chiffres uniquement et sa longueur doit être comprise entre 5 et 15. Le mot de passe doit avoir au minimum 8 caractères. L'email doit avoir un format correct et la date de naissance être une date valide. Vous pouvez voir dans cet exemple comment personnaliser les messages que CakePHP affichera en cas de non respect de ces règles.

Comme le montre l'exemple ci-dessus, un seul champ peut avoir plusieurs règles de validation. Si les règles pré-définies ne correspondent pas à vos critères, vous pouvez toujours ajouter vos propres règles de validation, selon vos besoins.

Maintenant que nous avons vu, en gros, comment la validation fonctionne, voyons comme ces règles sont définies dans le modèle. Il y a trois manières différentes pour définir les règles de validation : tableaux simples, une règle par champ et plusieurs règles par champ.

Note des traducteurs francophones : la règle "alphaNumeric" ne fonctionne pas pour notre alphabet, les caractères accentués ne sont pas validés. Pour cela, nous devrons donc passer par une expression régulière.