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 :
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.
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'); } }
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:
A présent, $this->form->getValue('login') et $this->form->getValue('password') me renvoient des chaînes vides !
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 }
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.
Partager