Bonjour, je suis entrain de faire les validation pour un formulaire d'inscription, j'ai vérifier que tout les champ n'etait pas vide et que l'email etait bien au bon format. Hors je ne c'est pas comment faire pour verifier que cette email n'est pas deja utiliser.
J'ai vue que dans la version 2 de CakePHP il y avait "isUnique" que l'on pouvait mettre dans la methode add du Validator, mais apparament ca n'existe plus sur CakePHP3 et je n'est pas trop comprit leur nouveau système

Voici mon code:

public function validationDefault(Validator $validator) {
        $validator->notEmpty('nom')
            ->notEmpty('prenom')
            ->notEmpty('email')
            ->add('email', [
                'email' => [
                    'rule' => 'email',
                    'message' => 'Vous devez entrer une adresse mail valide'
                ],
            ])
            ->notEmpty('password');

        return $validator;
    }

4 réponses


Bonjour.

J'ai vue que dans la version 2 de CakePHP il y avait "isUnique" que l'on pouvait mettre dans la methode add du Validator, mais apparament ca n'existe plus sur CakePHP3

Nous n'avons pas dû lire la même documentation alors : Créer des Règles de Champ Unique.

A quoi correspond la variable $rules ?
Je trouve que ce n'est pas tres claire

Si j'ai bien comprit la variable $rules est une instance de RulesChecker qui est utiliser dans la fonction buildRules() du model.
Moi je n'ai pas utiliser la fonction buildRules() mais la fonction validationDefault(). Y a t-il moyen de faire la meme chose avec l'instance de Validator ?
Ou faut-il que je passe toute mes verification dans la fonction buildRules() et que je supprime ma fonction validationDefault() ?

Tu n'as pas besoin de créer de fonction buildRules, car tu fais appel à une classe de règle qui existe dans l'ORM.
C'est pourtant précisé dans la documentation :

Comme les règles uniques sont couramment utilisées, CakePHP inclut une classe de Règle simple qui vous permet de facilement définir des ensembles de champ unique

Lorsque tu veux utiliser la règle isUnique, tu ajoutes dans le modèle concerné :

use Cake\ORM\Rule\IsUnique;

Puis tu l'utilises :

// Un champ unique.
$rules->add($rules->isUnique(['email']));

// Une liste de champs
$rules->add($rules->isUnique(['username', 'account_id']));

Tu peux modifier par :

$validator->notEmpty('nom')
            ->notEmpty('prenom')
            ->notEmpty('email')
            ->add('email', [
                'email' => [
                    'rule' => 'email',
                    'message' => 'Vous devez entrer une adresse mail valide'
                ]
            ])->isUnique(['email'])
            ->notEmpty('password');

Je ne comprends pas ce qu'il y a de compliqué à comprendre, ils sont assez explicite dans la documentation pour renseigner son utilisation.