Salut,
J'ai réussi à créer un petit formulaire d'inscription via CakePHP avec les règles de validation par défaut et ça fonctionne impeccable.
En revanche j'aimerais rajouter une règle personnalisée pour valider le nom d'utilisateur avec une regex toute simple:

/^[a-zA-Z0-9çàìòéèùôïëê ]+$/i

Mais voilà, j'ai beau lire la doc, je ne comprends absolument pas comment fonctionnent les règles custom.

Voici mon code:

<?php 
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;
use Cake\ORM\RulesChecker;

class UsersTable extends Table{

    public function validationDefault(Validator $validator){

        $validator
            ->notEmpty('username',__('Vous devez spécifier un nom d\'utilisateur'))
            ->notEmpty('password', __('Vous devez choisir un mot de passe'))
            ->add('email', 'valid', ['rule' => 'email','message'=>'Vous devez rentrer une adresse eMail valide'])
            ->notEmpty('email',__('Vous devez spécifier une adresse email'))

            ->add('password', [
                'length' => [
                    'rule' => ['minLength', 8],
                    'message' => 'Le mot de passe doit contenir au moins 8 caractères',
                ]
            ])
            ;
        return $validator;
    }

    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->isUnique(['email'],'Cette adresse email est déjà utilisée'));
        $rules->add($rules->isUnique(['username'],'Cet identifiant est déjà utilisé'));
        return $rules;
    }

}

Mon controleur ne fait rien d'autre que le save puisque j'ai suivi les conventions.

Est-ce que quelqu'un peut m'expliquer comment ça fonctionne svp ?
Merci. :)

1 réponse


Natà
Auteur
Réponse acceptée

Trouvé !

->add(
                'username',
                'custom',[
                    'rule'=>[
                        'custom',
                        '#^[a-zA-Z0-9çàìòéèùôïëê ]+$#i'
                        ],
                'message'=>'Votre identifiant contient des caractères non autorisés.'
                ]
            )

Vraiment pas claire la doc pour le coup ! oO