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 :

sfValidatorSchemaCompare et sfValidatorEmail


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut sfValidatorSchemaCompare et sfValidatorEmail
    Bonjour, j'ai deux champs pour le mot de passe dans mon formulaire et je tente de personnaliser les erreurs. Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $this->validatorSchema->setPostValidator(
    		new sfValidatorSchemaCompare('confirm', sfValidatorSchemaCompare::EQUAL, 'password', 
    		  array(), 	
    		  array(
    			  'invalid' 		=> 'Veuillez retaper votre mot de passe'
    		  )
    		)
     
       );
    ca ne retourne rien. mais quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $this->validatorSchema->setPostValidator(
    		new sfValidatorSchemaCompare('confirm', sfValidatorSchemaCompare::EQUAL, 'password', 
    		  array('required' => true), 	
    		  array(
    			  'required' 		=> 'Veuillez retaper votre mot de passe'
    		  )
    		)
       );
    Ca renvoie "Invalid". Comment puis-je personnaliser le message d'erreur ?

    Quant à sfValidatorEmail, en regardant l'API je ne vois simplement aucun moyen de renvoyer un message. Si vous connaissez une manière de le faire, pourriez vous m'aider ? merci.

  2. #2
    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
    Tous les validator utilisent deux messages par défauts, invalid et required. Suivant le cas. Après, il suffit de compléter le message.

    Pour ton problème de prix, je pense qu'il te faut créer un peu de code en javascript, qui va récupérer le prix par un échange, probablement en json, mais d'autre protocoles sont envisageables.

    Attention toute fois aux personnes qui n'auraient pas activer le javascript sur leur poste mais souhaiteraient, néanmoins réserver une chambre...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Merci pour les validateurs. Je vais essayer. Mais je ne me souviens pas avoir parlé de prix. Trop de messages auxquels tu dois répondre à la fois sans doute !

  4. #4
    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
    Carramba ! J'ai mélangé deux réponses. Et aucune idée d'à qui était destinée la deuxième

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Je n'arrive pas à les faire marcher. Voici mon code
    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
     
    $this->setValidators(array(
      //'confirm'             	=> new sfValidatorString(),
      'last_name'             	=> new sfValidatorString(array('required' => false, 'max_length' => 255), array('max_length' => 'Le nom est trop long')),
      'first_name'           	=> new sfValidatorString(array('required' => false, 'max_length' => 255), array('max_length' => 'Le prénom est trop long')),
     // 'email_address'			=> new sfValidatorEmail(),
      'pays'             		=> new sfValidatorString(array('max_length' => 255)),
      'signature'        		=> new sfValidatorString(array('required' => false, 'max_length' => 200), array('max_length' => 'Votre signature comporte plus de caractères qu\'il n\'est autorisé'))
    ));
     
    $this->validatorSchema->setPostValidator(
    	  new sfValidatorSchemaCompare(
    			'confirm', sfValidatorSchemaCompare::EQUAL, 'password', 
    			array(), 	
    			array('invalid' => 'Le mot de passe et sa confirmation sont différents')
    	  )
     );
     
    $this->validatorSchema['email_address'] = new sfValidatorAnd(array(
    	new sfValidatorEmail(array(), array('invalid' => 'Vous devez fournir un e-mail valide')),
    	new sfValidatorString(array('required' => true), array('required' => 'Vous devez fournir un e-mail valide')),
    	new sfValidatorCallback(array('callback' => array($this, 'checkEmailAvailability')) )
    ));
    Le formulaire n'est pas envoyé. La page se recharge simplement avec les mêmes valeurs et sans aucun message d'erreur ni exception.
    Pour que le formulaire soit envoyé et traité, il faut que j'enlève d'abord le setPostValidator et validatorSchema['email_address'], (c'est à dire) tous les validateurs à l'extérieur du $this->setValidators, et qu'à l'intérieur de celui-ci, je décommente les deux lignes précédemment commentées, ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $this->setValidators(array(
      'confirm'             	=> new sfValidatorString(),
      ...
     'email_address'			=> new sfValidatorEmail(),
      ...
    ));

  6. #6
    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
    Pour la validation du mot de passe, je l'aurais écrit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            $this->validatorSchema->setPostValidator(
                    new sfValidatorSchemaCompare(
                    'pass1',
                    sfValidatorSchemaCompare::EQUAL,
                    'pass2',
                    array(),
                    array('invalid' => 'wrong_password')
    Récupéré d'un de mes form, donc, il devrait marcher, le message est "space", mais prévu pour travailler en i18n.


    Pour l'email, c'est plus compliqué, je ne vois pas trop l'intérêt d'avoir un and avec trois entrée. Dans mes souvenirs, le validateur sfValidatorEmail gère aussi la notion required, ce qui permettrait de ce passer du sfValidatorString. Et le dernier, le sfValidatorCallback je ne vois pas trop ce qu'il peut apporter de plus que ce qui existe déjà et n'ayant pas le code de la méthode checkEmailAvailability()...

    Je pense que tu devrais simplifier ce validateur et que le sfValidatorEmail devrait pouvoir remplir à lui seul cette fonction.

Discussions similaires

  1. [1.x] sfValidatorEmail VS swiftMailer
    Par tontonnux dans le forum Symfony
    Réponses: 3
    Dernier message: 20/06/2012, 11h33

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