Salut,

Je sais que cette question à été déjà posée, mais les réponses ne me permettent pas de solutionner mon problème.
Pour un même champ, j'ai des règles dont le message s'affiche et d'autres non. Je ne comprends pas trop.

Par exemple, pour le champ username , la règle alpha affiche bien le message, mais pas celle pour uniq (pareil pour le champ mail , la réglé mail s'affiche mais pas uniq ).

J'ai pourtant déjà fait un site avec cake et mes messages étaient toujours affichées

Pouvez-vous m'aider svp ???

Modèle :

public $validate = array(
        'username' => array(
                'alpha' => array(
                        'rule' => '/^[a-z0-9A-Z]+$/',
                        'message' => 'Votre nom d\'utilisateur n\'est pas valide'
                        ),
                'uniq' => array(
                        'rule' => 'isUnique',
                        'message' => 'Ce pseudo est déjà utilisé'
                        )
        ),
        'mail' => array(
                'mail' => array(
                    'rule' => 'email',
                    'message' => 'Email non valide'
                        ),
                'uniq' => array(
                        'rule' => 'isUnique',
                        'message' => 'Ce mail est déjà utilisé'
                )
        ),
        'password' => array(
                'rule' => 'notEmpty'
        ),
        'password2' => array(
                'rule' => 'identicalFields',
                'message' => 'La confirmation du mot de passe n\'est pas valide'
        )
    );

Contrôleur :

function signup()
    {
        //+ If data have been sent
        if (!empty($this->request->data))
        {
            //+ Create user
            $this->User->create($this->request->data);
            //+ Validate user
            if ($this->User->validates())
            {
                //+ Generate token
                $token = md5(time().'-'.uniqid());

                //+ Create user with data
                $this->User->create(array(
                        'username' => $this->request->data'User']'username'],
                        'password' => $this->Auth->password($this->request->data'User']'username']),
                        'mail' => $this->request->data'User']'mail'],
                        'token' => $token
                ));
                //+ Save user
                $this->User->save();

                //+ Generate email for comfirm
                App::uses('CakeEmail', 'Network/Email');
                $cakeEmail = new CakeEmail('smtp');
                $cakeEmail->to($this->request->data'User']'mail']);
                $cakeEmail->subject('Votre inscription');
                $cakeEmail->viewVars($this->request->data'User'] +
                        array(
                                'token' => $token,
                                'id' => $this->User->id
                        )
                );
                $cakeEmail->emailFormat('text');
                $cakeEmail->template('signup');
                $cakeEmail->send();

                //+ Work completed
                $this->Session->setFlash("Vous êtes bien inscrit.");
            }
        }
    }

Vue :

<h1>S'inscrire</h1>
<? echo $this->Form->create('User'); ?>
    <? echo $this->Form->input('username', array('label' => "Nom d'utilisateur")); ?>
    <? echo $this->Form->input('password', array('label' => "Mot de passe")); ?>
    <? echo $this->Form->input('password2', array('label' => "Confirmer mot de passe", 'type' => 'password')); ?>
    <? echo $this->Form->input('mail', array('label' => "Email")); ?>
<? echo $this->Form->end("S'inscrire"); ?>

Pour information je suis en version 2.5.3 de cake.

Encore merci

7 réponses


Bonjour pour ton model je te conseil de le faire à ma manière test le et dis moi si c'est bon ou pas.

public $validate = array(
        'username' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Ce Champ est obligatoire',
            ),
            'unique' => array(
                'rule' => 'isUnique',
                'message' => 'Ce pseudo est déjà utilisé.'
            ),
            'pattern' => array(
                'rule' => '/^[a-z0-9A-Z]+$/',
                'message' => 'Votre nom d\'utilisateur n\'est pas valide'
            ),
        ),
        'mail' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Ce Champ est obligatoire',
            ),
            'mail' => array(
                'rule' => 'email',
                'message' => 'Email non valide'
            ),
            'unique' => array(
                'rule' => 'isUnique',
                'message' => 'Ce mail est déjà utilisé'
            ),
        ),
        'password' => array(
            'rule' => 'notEmpty'
        ),
        'password2' => array(
            'rule' => 'identicalFields',
            'message' => 'La confirmation du mot de passe n\'est pas valide'
        )
    );

Cordialement.

Merci pour ton aide, mais c'est non. Le message de la règle isUnique ne remonte pas pourtant le contrôle remonte bien le champ en erreur (div error-message).

Est-ce lié à l’internationalisation ??? Pourtant j'ai enlevé la locale FR et sa n'a pas marché plus ...

ça se peut oui mais par précaution laisse ton application en multilingue et je sais pas si t'a ajouté la variable qui pour avoir la traduction des messages d'erreurs dans les models il faut que t'ajoute

public $validationDomain = 'validation';

j'crois mais normalement c'est ça vérifie quand même dans la doc mais avec le model que j'ai écris plus la variable normalement tu devrais pas avoir de problème j'ai déjà une application cake EN/FR avec les messages de validations sauf que je n'ai pas traduit mais ça marche quand même mais je pense qu'on a pas la même version donc essaye avec la variable et voit ce que ça donne.

Cordialement.

Moi aussi j'ai rencontré le même problème quand j'ai fais e chekUnique sur le champs du nom. La fonction empêche l'ajout d'un mm nom mais le msg ne s'affiche pas sur le formulaire. J'ai du faire un $this->Session->setFlash pour afficher le message sur la page index :/.

J'ai arrété un peu ce projet pour le moment, mais je vais essayer ce que vous me dites. Je vous tiens au courant.

Merci

La solution à ce problème peut peut-être t'aider : http://www.grafikart.fr/forum/topic/13644
Je cite :
"Apparement le find('count') de CakePHP est bugué et ne retourne que des erreurs; et ma règle isUnique semble utilisé ce fameux find('count')."

Effectivement. Bonne suggestion nebjix. J'essayerai quand j'aurai du temps (bientôt les vacances) et je vous ferai un retour sur la question.