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'); } } }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.
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>
Par contre si je saisie correctement le formulaire et que je passe dans le save(), j'obtiens une grosse erreur qui tâche !
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.
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)
Est ce que quelqu'un a déjà été soumis à ce problème et aurait une solution ?
D'avance merci,
Olivier.
Partager