Bonjour à tous,

Je rencontre un problème avec sfDoctrineGuard que j'essaye d'étendre avec un sfGuardUserProfile en utilisant un embedForm.

Pour mettre en évidence le problème j'ai recréé un projet vide juste initialisé avec sfDoctrineGuardPlugin.

J'ai déclaré une classe Profile pour étendre l'objet sfGuardUser.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# config/doctrine/schema.yml
Profile:
  tableName:          test_profile
    columns:
      first_name:       { type: string(255) }
      last_name:        { type: string(255) }
      email_address:    { type: string(255), notnull: true, unique: true }
      sf_guard_user_id: { type: integer(4), notnull }
    relations:
      User:
        class:       sfGuardUser
        type:        one
        foreignType: one
        onDelete:    CASCADE
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
18
19
20
21
22
23
24
25
26
27
28
<?php
// lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class
 
class sfGuardUserForm extends PluginsfGuardUserForm
{
  public function configure()
  {
    unset(
      $this['is_active'],
      $this['is_super_admin'],
      $this['created_at'],
      $this['updated_at'],
      $this['last_login'],
      $this['algorithm'],
      $this['salt'],
      $this['groups_list'],
      $this['permissions_list']
    );
 
    $profile = new ProfileForm();
 
    unset(
      $profile['sf_guard_user_id']
    );
 
    $this->embedForm('Profile', $profile);
    }
}
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
<?php
// app/frontend/modules/user/actions/actions.class.php
 
class userActions extends sfActions
{
 
  public function executeIndex(sfWebRequest $request)
  {
    $this->form = new sfGuardUserForm();
 
    if( $request->isMethod('post') && $this->form->bindAndSave($request->getParameter('sf_guard_user', array())))
    {
      $this->redirect('user/index');
    }
  }
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<!-- app/frontend/modules/user/templates/indexSuccess.php -->
<form action="<?php echo url_for('user/index'); ?>" method="POST">
  <table>
    <?php echo $form; ?>
  </table>
  <input type="submit" name="save" value="save" />
</form>
Le formulaire s'affiche correctement, les validations fonctionnement, et si je ne remplie pas correctement les champs soumis à validations, le formulaire me reviens correctement avec les erreurs.
Par contre si je saisie correctement le formulaire et que je passe dans le save(), j'obtiens une grosse erreur qui tâche !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
500 | Internal Server Error | Doctrine_Validator_Exception Validation failed in class Profile
 
2 fields had validation errors:
 
* 1 validator failed on email (unique)
* 1 validator failed on sf_guard_user_id (notnull)
Du coup pour tester j'ai désactivé les contraintes qui posent problème, et là je me rends compte que le save() sur ma partie Profile est activé 2 fois, ce qui fait que la seconde fois le sf_guard_user_id est null et l'email n'est plus unique.

Est ce que quelqu'un a déjà été soumis à ce problème et aurait une solution ?


D'avance merci,
Olivier.