Bonjour,
je débute avec Symfony depuis deux semaines, et je suis confronté aujourd'hui a deux problème que je n'arrive pas à résoudre.
Premier problème :
Dans mon application, je gère des utilisateurs (Hé oui !). Il a été choisis, lors de l'édition par l'administrateur de données relatives à un utilisateur, de scinder le formulaire en deux : un pour les données "nom, adresse, etc", et un autre pour ses autorisations diverses (accès à certains documents).
J'ai choisis (peut être à tord) de faire deux sous-classes, userForm.class et userPermissionForm.class, héritées de UserFormBase.class. Les deux sont affichés dans deux templates différents, je passe de l'un à l'autre par un bouton, les données se chargent bien, jusque là, tout va bien.
Dans mon action.class, j'ai donc une fonction executeEdit :
une fonction executeUserPermissions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public function executeEdit($request) { $this->user = $this->getRoute()->getObject(); $this->form = new UserForm($this->user); }
et une fonction executeupdate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public function executeUserPermissions($request) { $this->user = $this->getRoute()->getObject(); $this->form = new UserPermissionsForm($this->user); }
Le problème est lié à cette dernière. En effet, lorsque que je fais $this->form, je doit savoir quel est le formulaire qui cherche à s'updater. Hors je n'ai pas trouvé la fonction qui me permettrais de récuperer une donnée à mettre en condition dans un if tout bête. C'est peut-être (certainement) trivial, mais je n'ai rien trouvé dans la doc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public function executeUpdate(sfWebRequest $request) { $this->user = $this->getRoute()->getObject(); $this->form = new UserForm($this->user); $this->processForm($request, $this->form); $this->setTemplate('edit'); }
Deuxième problème :
Chaque utilisateur a un mail, qui sert de login sur l'application. J'ai implanté un postvalidator dans userForm.class qui vérifit l'unicité de ce mail dans la base
Lors de l'ajout d'un nouvel utilisateur, pas de problème. Par contre, quand je cherche à mettre à jour les données d'un utilisateur, le postvalidator pose problème : on ne peut pas sauvegarder sans changer le mail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $this->validatorSchema->setPostValidator( new sfValidatorPropelUnique( array('model' => 'User', 'column' => 'email', 'field' => 'email'), array('invalid'=>'This mail is already used by a user. Please change it.')));
Je vous joint la méthod processForm qui sert à sauvegardé les données d'un formulaire :
Je vous remercie d'avance de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 protected function processForm(sfWebRequest $request, sfForm $form) { $form->bind( $request->getParameter($form->getName()), $request->getFiles($form->getName()) ); if ($form->isValid()) { $user = $form->save(); $this->redirect('user/index'); } }
Partager