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 29/11/2010, 10h41   #1
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
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 :
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 :
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.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 21h11   #2
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
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...
__________________
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 01/12/2010, 08h49   #3
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
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 !
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 13h00   #4
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
Carramba ! J'ai mélangé deux réponses. Et aucune idée d'à qui était destinée la deuxième
__________________
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 03/12/2010, 10h53   #5
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Je n'arrive pas à les faire marcher. Voici mon code
Code :
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 :
1
2
3
4
5
6
7
 
$this->setValidators(array(
  'confirm'             	=> new sfValidatorString(),
  ...
 'email_address'			=> new sfValidatorEmail(),
  ...
));
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 13h45   #6
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
Pour la validation du mot de passe, je l'aurais écrit ainsi :
Code :
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.
__________________
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 03/12/2010, 15h54   #7
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Pour le mot de passe, mis à part le message, toi et moi faisons pareil.

Le champ email_address a un attribut unique à true et je reçois souvent des "Duplicate entry for email_address" si j'enregistre un nouveau membre avec un mail déjà existant. Je veux juste vérifier que l'email n'a pas déjà été entré par quelqu'un et envoyé un message personnalisé. C'est la raison d'être du checkEmailAvailability. Et de toute façon je devrai faire un checkLoginAvailability. Donc le problème demeure si déjà ce premier essai de validation ne marche pas.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 19h02   #8
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
Et si tu mets un index unique sur la table message ?

Si non, essaye les validators de ton message un a un. puis par couples, puis ensembles, puis...
__________________
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 07/12/2010, 12h47   #9
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
En testant un a un je suis parvenu à les faire marcher tous, sauf les callback mais là je crois le problème se situe au niveau de la fonction appelée par le callback. Elle se présente comme suit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public function checkLoginAvailability($validator, $values) 
  {
	if (!empty($values['username'])) 
	{
	  $nbr = Doctrine_Query::create()
		->from('membre m')
		->where("m.username = ?", $values['username'])
		->count();
	  if ($nbr==0) 
	  {
		// Login dispo
		return $values;     
	  } 
	  else 
	  {
		// Login pas dispo
		throw new sfValidatorError($validator, 'Ce pseudo a déjà été pris.');
	  }
	}
  }
En l'état elle ne renvoie pas le message d'erreur quand on entre un pseudo déjà existant. Mais quand je modifie la condition du if(), quand je fais le message s'affiche. Je ne sais pas pourquoi la requête marche à l'envers. Est-ce que cela proviendrait du ->count() ?
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h40   #10
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
De tête.

Il existe un validator qui vérifie si un enregistrement existe dans une table. Peut-être serait-il plus simple de l'utiliser ?
__________________
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 07/12/2010, 16h34   #11
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
D'accord, je ne demande qu'à le prendre. C'est lequel ?
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 21h46   #12
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
Regarde du côté de : sfValidatorDoctrineUnique
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h02.


 
 
 
 
Partenaires

Hébergement Web