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 01/01/2012, 17h00   #1
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Par défaut validation de champs dépendant en symfony (sfFilterForm)

Bonjour à tous,

Je suis nouveau en php et donc symfony, actuellement je suis sur un projet et

je souhaite dans mon filtreform effectuer une validation d'un champ qui dépends

de la présence d'un deuxième (autre) champ ou d'un troisième (autre) champ :

en gros en exécute le filtre sur le 1er champ si et seulement si le 2ème champ

est présent et valide ou si et seulement si le 3ème champ est présent et valide.

Merci d'avance pour votre aide!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h18   #2
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
je ne croit pas que cela soit possible.
De toute, c'est plus un comportement JavaScript que PHP.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h04   #3
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 771
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 771
Points : 790
Points : 790
Si c'est possible : il faut utiliser un postValidator.

Voir un exemple dans ce tuto :
http://www.symfony-project.org/more-...l_objet_sfform
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h51   #4
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
oui mais dans ce cas il faut valider a chaque fois non ?
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 10h21   #5
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Merci pour vos réponses!
Effectivement c'est avec un postValidateur que l'on fait cela. J'ai bien créée un
et l'avais déclarer comme suite :
$this->validatorSchema->setPostValidator(new sfMonValidatorFilterSchema());
puis j'ai créée une sfMonValidatorFilterSchema.class.php dan ../lib
mon problème actuellement c'est que dans la méthode doClean($values)
j'arrive à récupérer certaines valeur que j'ai rentré(taper) dans le filtre et les affiché dans les log mais d'autre je récupère un Array alors qu'elles sont bien de simples string et je n'arrive pas à récupérer leur valeur?????
Sachant que dans mon filtrForm j'ai surchargé la méthode "addNomFieldColumnQuery($query, $field, $values)"
et là aussi la valeur "$values" doit être normalement la même que celle entrée dans le filtre (form) et de cette manière ($values['text']) mais la encore je ne récupère une 'A' de type Array??????? comme je suis nouveau dans symfony je me dis que ça doit avoir relation avec les validateurs?
Merci d'avance pour vos répenses

Bonne Année à tous!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 13h49   #6
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
COUCOU....... il y a quelqu'un!!!!!!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h43   #7
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 771
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 771
Points : 790
Points : 790
Je n'ai rien compris à ta question.
Si tu peux nous la refaire avec des extraits de code pour être plus précis, on y verra peut-être plus clair
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h31   #8
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Merci herode pour votre réactivité

En fait, j'ai 2 problèmes que je croix sont liés enfin le 2eme pn qui dépend du 1er, je m'explique:

le problème N°1 :

J'ai un sfFilterForm avec champs tous des string

puis j'ai ajouter un nouveau champ de type text (string) comme ça

Code :
1
2
$this->widgetSchema['myField'] = new sfWidgetFormFilterInput(array('with_empty' => false));
	//$this->validatorSchema['myField'] = new sfValidatorString(array('required' => false));
tout en faisant les modifs qu'il faut dan generator.yml etc...

et pour que ce nouveau champ soit impliqué dans le filtrage j'ai ajouter une méthode dans mon sfFilterForm comme suite

Code :
1
2
3
4
5
6
7
8
9
public function addMyFieldColumnQuery($req, $field, $values) 
  {
	$maValeur = $values['text']; //la valeur entrer dans le nouveau champ myField
 
	$rootAlias = $req-> getRootAlias();
	$req->addWhere($rootAlias.'.myField LIKE ?', '%'.$values['text'].'%');
 
	return $req;
  }
qand par expl je print($maValeur) j'ai exactement ce que j'ai mis dans le champ du filterForm mais un moment donné print($maValeur) m'affiche la lettre A
quand je vérifie son type je trouve que c'est un Array alors que dans le filterForm c'est une string????

le 2eme problème et lié au postValidator (j'ai bien suivis le tuto que vous m'aviez passer en haut ==> http://www.symfony-project.org/more-...Advanced-Forms) que j'ai ajouté (déclarer) pour vérifier l’existence du nouveau champ myField dans le filterForm et un autre champ du même filterForm comme suite :

Code :
$this->validatorSchema->setPostValidator(new sfValidatorMyFilterSchema());
puis j'ai créé la class sfValidatorMyFilterSchema.class.php que j'ai placé dans /lib

son code resemble à ça :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class sfValidatorMyFilterSchema extends sfValidatorSchema
{
	protected function configure($options = array(), $messages = array())
	{
 
		$this->addMessage('myField', 'message1!');
		$this->addMessage('field2', 'message2');
 
	}
 
	protected function doClean($values)
	{		
		$errorSchema = new sfValidatorErrorSchema($this);
 
		foreach($values as $key => $value)
		{			
			$errorSchemaLocal = new sfValidatorErrorSchema($this);

ici et en fonction de l'itération $key=myField puis $key=field2

et $valeur1=la valeur entrée dans le champ myField
$valeur2=la valeur entrée dans le champ field2

le problème ici est le même que le problème 1 càd $valeur1=A est de type
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array 
 
			if (count($errorSchemaLocal))
			{
				$errorSchema->addError($errorSchemaLocal, (string) $key);
			}
		}	
		if (count($errorSchema))
		{
			throw new sfValidatorErrorSchema($this, $errorSchema);
		}
		return $values;
	}
}
Merci d'avance pour votre réponse!!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h36   #9
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
juste une petite précision sur les valeurs dans la classe en bas dans la boucle foreach($values as $key => $value) {

$valeur1=$value //la valeur entrée dans le champ myField
$valeur2=$value //la valeur entrée dans le champ field2

}

Cordialement!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h41   #10
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Citation:
Envoyé par aza806 Voir le message
juste une petite précision sur les valeurs dans la classe en bas dans la boucle foreach($values as $key => $value) {

$valeur1=$value //la valeur entrée dans le champ myField
$valeur2=$value //la valeur entrée dans le champ field2

}

Cordialement!
Bonsoir à toi,

Tout d'abord, pourrais tu utiliser la balise code pour le code s'il te plait. Ca sera plus agréable pour nous tous de lire tes post (en pj le screenshot qui te mon ou tu dois cliquer).

Ensuite ton foreach c'est pas correcte, la tu tes valeurs $valeur1 et $valeur2 auront toujours la même valeur.
Images attachées
Type de fichier : png contenue-code.png (36,0 Ko, 5 affichages)
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 09h48   #11
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Désolé je n'ai pas l'habitude sur les forums! merci encore une fois.

le problème N°1 :

J'ai un sfFilterForm avec des champs tous des string

puis j'ai ajouter un nouveau champ de type text (string), voici le code :

Code :
1
2
3
 
$this->widgetSchema['myField'] = new sfWidgetFormFilterInput(array('with_empty' => false));
$this->validatorSchema['myField'] = new sfValidatorString(array('required' => false));
tout en faisant les modifs qu'il faut dan generator.yml etc...

pour que le filtrage avec ce nouveau champ fonctionne j'ai dû ajouter une méthode dans mon sfFilterForm comme suite


Code :
1
2
3
4
5
6
7
8
9
 
public function addMyFieldColumnQuery($req, $field, $values)
{
 
$rootAlias = $req-> getRootAlias();
$req->addWhere($rootAlias.'.myField LIKE ?', '%'.$values['text'].'%');
 
return $req;
}
le problème ici c'est que :
quand je fais le test dans mon filterForm et je tapes une string par exemple "Bonne Année" $values['text'] contient un seul caractère A et non "Bonne Année"
quand je vérifie son type je trouve que c'est un Array alors que myField est déclaré comme une string????
Bizzard non!!!!!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h44   #12
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Déjà il y a un truc qui ne vas pas tu fais une recherche avec le alors que tu as déclaré un champs myField.

C'est uniquement avec le meme noms que tu pourras trouvé ta valeur.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h55   #13
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
la syntaxe est bien correcte je me suis inspiré de la doc de symfony, d'ailleurs un moment donnée ce code marche bien et

récupère bien la string entrée dans le chap myField.
seulement un moment donnée il y a une régression de mon code et là je ne sais pourquoi ce même code $ récupère juste un caractère A
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h04   #14
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
tu peux mettre le lien de la doc symfony que tu t'es inspire ?
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h26   #15
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
en fait ce n'était pas de la doc symfony pardon mes un autre forum en en
http://oldforum.symfony-project.org/...uery#msg_91671

tu trouveras dans le dernier poste tous le code

si tu as une autre façon de faire je suis preneur

Merci!!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h42   #16
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
de plus ce qui est étonnant quand je tapes rien dans le filterForm et je l'envoie vide

la méthode

Code :
addMyField($query, $field, $values)
est appelée par symfony est

prend la valeur Array

ce qui n'est pas normal!!!!!!!

cette méthode ne devrait pas être appelée si on met rien dans myField.......
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h03   #17
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Merci à tous!

J'ai résolu le problème

en fait un truc tout bête dans le code de mon filtreForm faut faire les déclarations de widgetSchema puis après les validateur correspondant
sinon le code était belle est bien correcte
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 12h27   #18
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
En fait le problème vient du validateur du widget myFild qui reçoit une string...
le validateur de string prédéfinit de symfony me renvoie la lettre A et ce quoi que je rentre dans le champ myFild!!!! bizzard!!!!
du coup ce que j'ai fais solution radicale pas de validateur pour ce champ myField et oui je l'ai mi en commentaire... et là je reçoit bien la valeur que rentre dans ce champ...
La question est cependant toujours ouverte pourquoi le validateur de string me renvoie la lettre A??????
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 09h24   #19
Membre habitué
 
Inscription : juin 2006
Messages : 488
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 488
Points : 116
Points : 116
j'ai pas tout relue, mais j'ai eu le même cas: http://www.developpez.net/forums/d10...eter-is_empty/

En faite sfWidgetFormFilterInput ne renvoie pas un string mais un array.
Array[is_empty]
array[text].

donc dans un premier temps j'avais bypassé le problème en utilisant le validateur sfValidatorPass.

ensuite dans ton
Code :
1
2
3
4
5
6
7
8
*
public function addMyFieldColumnQuery($req, $field, $values)
{
 
$rootAlias = $req-> getRootAlias();
$req->addWhere($rootAlias.'.myField LIKE ?', '%'.$values['text'].'%');
 
return $req;
fait un var_dump de $values[$field]['text'], je croit que ta valeur se trouve la.
erictomcat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 18h39   #20
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
c'est ce que j'ai fait pour l'instant j'avais bypassé le problème en utilisant le validateur sfValidatorPass pour une sfWidgetFormInputText

c'est étonnant car j'ai essayé tout mais ça ne marche pas

quant je fais $values['text'] il me donne le caractère A
et quand je fais $values[$field]['text'] il m'envoie une erreur !!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h32.


 
 
 
 
Partenaires

Hébergement Web