2012-07-26 2 views
0

J'ai mis en place la règle 'isUnique' et j'ai défini la valeur 'create' pour l'option 'on'.CakePHP. Ne fonctionne pas "on => create"

Code complet:

'username' => array(
    'notempty' => array(
     'rule' => array('notempty'), 
     'message' => 'Empty field', 
     'required' => true, 
    ),    
    'between' => array(
     'rule' => array('between',3,25), 
     'message' => 'Too long value' 
    ), 
    'unique' => array(
     'rule' => 'isUnique', 
     'on' => 'create', 
     'message' => 'Already taken', 
     'required' => true, 
    ) 
) 

Mais quand je suis en train de vous connecter, je reçois le message d'erreur. Pourquoi?

CakePHP 2.2.1

+0

Obtenez-vous l'erreur sans « sur »? –

+0

Oui @DavorLozic – Scofield

+0

Modifiez votre question et ajoutez plus de code. Mettez AppController, UsersController (ou où sont votre login et votre inscription), modèle et vue. :) –

Répondre

0

La raison est parce que vous avez 'required' => true ensemble, ce qui nécessite la clé d'être présent lors de la validation. Cela est en conflit avec la clé 'on', comme expliqué ici: http://book.cakephp.org/2.0/en/models/data-validation.html#one-rule-per-field

Cette option est uniquement requise lors de la création.

'unique' => array(
    'rule' => 'isUnique', 
    'on' => 'create', 
    'message' => 'Такой никнейм уже занят', 
    'required' => 'create', // change this to 'create' 
) 
+0

la touche 'required' rend le FIELD nécessaire et la touche 'on' fait que la règle est appliquée. donc ils sont deux choses différentes! – betatester07

0

Le problème est que lorsque vous essayez de vous connecter, CakePHP pense que vous créez un nouveau record (CakePHP identifie comme nouveau record parce que vous ne fournissez pas ID de l'élément comme vous le faites quand vous éditez un objet).

La solution pourrait être de créer une fonction de validation personnalisée qui vérifierait pour nom d'utilisateur unique tout le temps, sauf lors de la connexion.

+0

ouais, maintenant j'utilise des fonctions personnalisées pour vérifier ce genre de champs – Scofield

+0

Je viens de faire face à un problème similaire et je n'ai pas été capable de trouver une bonne solution donc après quelques recherches j'ai posté la mienne ici – betatester07