IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Validateur personalisé avec sfValidatorAnd


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut
    Vérifies que tu n'as un autre validateur (surement dans la baseclass) qui valide login seul avec un required à true.

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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 ?

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    Par défaut
    Tu as raison michel pour le login mais moi je ne fais que respecter les specs !!!

  5. #5
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
     $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

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
            }
        }

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2009, 16h28
  2. [Zend_Form] Bonne pratique avec validateurs spécifiques
    Par jbarthe dans le forum Zend_Form
    Réponses: 4
    Dernier message: 23/12/2008, 17h53
  3. Custom Tag personalisé avec body eval
    Par wdionysos dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/08/2007, 14h19
  4. [C#] Detection d'un controle avec validateur.
    Par Landolsi dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/10/2006, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo