Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2010, 15h36   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2009
Messages : 44
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 44
Points : 13
Points : 13
Par défaut Validateur personalisé avec sfValidatorAnd

Bonjour à tout le monde,

Je reviens à la charge avec mes validateurs personnalisé
Je cherche à faire une vérification sur un champ login
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
        $this->setValidator('login', new sfValidatorAnd(
                                    array(
                                        new sfValidatorString(
                                                array(
                                                    'required' => FALSE,
                                                    'min_length' => 6,
                                                    'max_length' => 14),
                                                array(
                                                    'min_length' => "Le login est trop court. 6 caractères minimum.",
                                                    'max_length' => "Le login est trop long. 14 caractères maximum",
                                                )
                                            ),
                                        new sfValidatorRegex(
                                                array('pattern' => '/^[a-zA-Z0-9-]+$/'),
                                                array('invalid' => 'Le login ne peut pas contenir de caractères spéciaux.')
                                            )
                                        ),
                                    array(),
                                    array(
                                        'invalid' => "Le login ne peut pas contenir de caractère spéciaux."
                                    )
                                )
                        );


Si je ne saisie rien dans le champ il me met quand même le message d'erreur required pour le login...
et si je saisie une chaine de 2 caractere il me met le message du invalid

Je ne comprends pas...
bedomon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 10h38   #2
Membre à l'essai
 
Inscription : mai 2007
Messages : 58
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 58
Points : 24
Points : 24
Vérifies que tu n'as un autre validateur (surement dans la baseclass) qui valide login seul avec un required à true.
Cethywolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 23h30   #3
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Un login limité a 14 caractères et sans caractères spéciaux ? Quel est l'intérêt ? As-tu pour objectif de faciliter le piratage de l'application ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 17h58   #4
Candidat au titre de Membre du Club
 
Inscription : septembre 2009
Messages : 44
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 44
Points : 13
Points : 13
Tu as raison michel pour le login mais moi je ne fais que respecter les specs !!!
bedomon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 21h35   #5
Futur Membre du Club
 
Jean-Yves
Développeur Web
Inscription : mai 2007
Messages : 49
Détails du profil
Informations personnelles :
Nom : Jean-Yves
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2007
Messages : 49
Points : 17
Points : 17
Hello Bedomon,

J'arrive peut être un peu tard, mais moi j'avais ce code en faisant ce superbe tuto de la ferme D'ailleurs ce qui m'étonne c'est que tu n'a qu'un seul "required" dans le sfValidatorString
Alors si t'a toujours pas trouvé la solution à ton souci, copie/colle cela pour voir ?

Code :
 $this->setValidators(array( 'pseudo' => new sfValidatorAnd( array( new sfValidatorString( array('required' => true, 'min_length' => 3, 'max_length' => 20), array( 'min_length' => "The pseudo is too short. 3 characters minimum.", 'max_length' => "The pseudo is too long. 20 characters maximum", ) ), new sfValidatorRegex( array('pattern' => '/^[a-zA-Z0-9-]+$/') ) ), array(), array( 'required' => "The pseudo is required", 'invalid' => "The nickname could not contain special characters." ) ), 'pass' => new sfValidatorString( array('required' => true, 'min_length' => 4, 'max_length' => 20), array( 'min_length' => "The password is too short. 4 characters minimum.", 'max_length' => "The password is too long. 20 characters maximum", 'required' => "Password is required", 'invalid' => "The password must contains between 4 and 20 characters" ) ), ));
Bonne chance
jylac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 14h21   #6
Candidat au titre de Membre du Club
 
Inscription : septembre 2009
Messages : 44
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 44
Points : 13
Points : 13
Citation:
Envoyé par jylac Voir le message
Hello Bedomon,

J'arrive peut être un peu tard, mais moi j'avais ce code en faisant ce superbe tuto de la ferme D'ailleurs ce qui m'étonne c'est que tu n'a qu'un seul "required" dans le sfValidatorString

Bonne chance
Merci jylac, j'ai trouvé une autre soluce pour gérer ce problème, mais je garde ton bout de code pour le tester ce week :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//définition du login unique
        $this->setValidator('login',
                            new sfValidatorRegex(
                                    array('pattern' => '/^[a-zA-Z0-9-]+$/', 'required'=>false),
                                    array('invalid'=>'Login : Seuls les caractères alphanumériques sont autorisés.')
                            ));
 
 
 
        //définition du validator sur la comparaison des mots de passe
        $validatorPassword = new sfValidatorSchemaCompare('mdp', sfValidatorSchemaCompare::EQUAL, 'remdp');
        $validatorPassword->setMessage('invalid','Les mots de passe ne sont pas identiques.');
 
            $this->validatorSchema->setPostValidator(
                                        new sfValidatorAnd(
                                                array(
                                                    $validatorPassword,
                                                    new sfValidatorCallback(
                                                            array(
                                                                'callback' => array($this, 'checkDisponibiliteLogin'))))));
 
 
public function checkDisponibiliteLogin($validator, $values) {
        if (!empty($values['login'])) {
            $requete = Doctrine_Query::create()
                        ->from('USER_User u')
                        ->where('u.login = ?' , $values['login'])
                        ->andWhere('u.id != ?', $values['id'])
                        ->andWhereIn('u.etat', array('En attente de validation', 'Valide'))
                        ->count();
 
            if ($requete != 0) {
                //login non disponible
                throw new sfValidatorError($validator, 'Un utilisateur avec le même login existe déjà.');
                return $values;
            } elseif(strlen($values['login']) < 3 || strlen($values['login']) > 14 ) {
                    throw new sfValidatorError($validator, 'Le login doit être compris entre 3 et 14 caractères.');
                } else {
                //login disponible
                    return $values;
                }
        } else {
            $user = new USER_User();
            $values['login'] = $user->generateLogin($user->filter($values['nom']), $user->filter($values['prenom']));
            $a=$values;
            $this->taintedValues['login'] = $values['login'];
            return $values;
        }
    }
bedomon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web