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 :

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);
  }
une fonction executeUserPermissions :

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);
  }
et une fonction executeupdate :

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');
  }
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.

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

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.')));
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.

Je vous joint la méthod processForm qui sert à sauvegardé les données d'un formulaire :

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');
    }
 }
Je vous remercie d'avance de votre aide.