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 :

validation de champs dépendant en symfony (sfFilterForm) [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    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!

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    je ne croit pas que cela soit possible.
    De toute, c'est plus un comportement JavaScript que PHP.

  3. #3
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Si c'est possible : il faut utiliser un postValidator.

    Voir un exemple dans ce tuto :
    http://www.symfony-project.org/more-...l_objet_sfform

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    oui mais dans ce cas il faut valider a chaque fois non ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    COUCOU....... il y a quelqu'un!!!!!!

  7. #7
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    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

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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!

  10. #10
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    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 Images attachées  

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  12. #12
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    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.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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

  14. #14
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    tu peux mettre le lien de la doc symfony que tu t'es inspire ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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!!

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    de plus ce qui est étonnant quand je tapes rien dans le filterForm et je l'envoie vide

    la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.......

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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??????

  19. #19
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    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 !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valider un champs automatiquement
    Par inge2007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 25/01/2007, 14h17
  2. Lire et valider 140 champs
    Par wkhead dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/04/2006, 08h41
  3. Validation de champs ds formulaire
    Par fikou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/03/2006, 13h57
  4. Validation saisie champ
    Par JUZAN dans le forum Access
    Réponses: 10
    Dernier message: 20/01/2006, 18h07
  5. Réponses: 3
    Dernier message: 15/03/2005, 12h22

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