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 :

Problème avec sfValidatorCallback dans un formulaire


Sujet :

Symfony PHP

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec sfValidatorCallback dans un formulaire
    Bonjour à tous,

    En préambule : je sais que le plugin sfGuard fonctionne à merveille pour gérer les identifications. En l'occurrence, c'est sciemment que je n'ai pas fait ce choix, et pour des raisons qu'il serait ennuyeux de développer ici.


    Dans un formulaire LoginForm héritant directement de sfFormSymfony, j'ai deux champs : login et password. Avec des validateurs "normaux" (sfValidatorString) sur chacun des deux champs, je peux exploiter mon formulaire sans problème dans mon action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $this->form = new LoginForm();
    if ($request->isMethod('post') && $request->getParameter($this->form->getName()))
    {
        $this->form->bind($request->getParameter($this->form->getName()));
        if ($this->form->isValid())
            {
                $this->login = $this->form->getValue('login');
                $this->password = $this->form->getValue('password');
            }
    }
    Ce code me permet bien d'afficher, dans la vue, les valeurs validées et nettoyées de login et password (avec $login et $password). Aucun problème à ce stade.

    Oui mais voilà, afin d'embarquer toute la logique d'identification dans l'objet formulaire, j'ai rajouté une callback de validation dans le postValidator:

    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
    public function configure()
    {
     
        // [... widgets et validateurs typiques, non détaillé ...]
     
        $this->validatorSchema->setPostValidator(
                new sfValidatorCallback(
                    array('callback' => array($this, 'doCheck')
                ))
            );
    }
     
    public function doCheck(sfValidatorBase $validator, array $values)
    {
        // n'importe quel code, même rien du tout,
        // le résultat sera le même dans l'action
    }
    A présent, $this->form->getValue('login') et $this->form->getValue('password') me renvoient des chaînes vides !
    J'ai réellement testé avec cet exemple très simplifié. Et je ne comprends pas mon erreur. Si la callback de validation ne renvoie pas de sfValidatorError, normalement le test passe et donc le formulaire est validé, non ? Pourquoi les valeurs validées et nettoyées du formulaire "bindé" (retournées par getValue($field) ou getValues()) ont-elles été effacées ?

    Si vous comprenez, merci de me le dire.

    Merci.
    Dernière modification par Invité ; 14/03/2012 à 22h31.

Discussions similaires

  1. Problème avec recherchev dans un formulaire
    Par vete25 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/04/2015, 11h24
  2. [PHP 5.0] Problème avec tableau dans formulaire
    Par umgrim dans le forum Langage
    Réponses: 2
    Dernier message: 30/07/2011, 17h45
  3. Problème avec Select dans le formulaire
    Par jejefm dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2007, 09h34
  4. Réponses: 12
    Dernier message: 02/04/2007, 16h17
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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