Bonjour,
j'ai un problème avec un formulaire et des relations embarquées de type many to many. Les relation s'affichent correctement. Lorsque j'essaye de valider pour modification le formulaire principal, j'ai des erreurs de validation comme si les champs de mes embedded relations n'étaient pas renseignés.
Voici des extraits de code :
Mon formulaire principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Les blessures déjÃ* affectées if (!$this->isNew()) { $this->embedRelation('Affecter'); }
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 //Mon template du formulaire principal, a l'endroit où j'affiche mes embedded relations <?php if(isset($form['Affecter']) && count($form['Affecter']) > 0){ ?> <fieldset> <legend>Blessures déja ajoutées</legend> <?php $affecterForm = $form->getEmbeddedForm("Affecter") ?> <?php $embeddedForms = $affecterForm->getEmbeddedForms() ?> <?php foreach($embeddedForms as $e): ?> <ul class="relation"> <li class="titreForm">Blessure : </li> <li> <span> <?php echo $e['idlesion']->renderLabel(); ?> <?php echo $e['idlesion']->renderHelp() ?> <?php echo $e['idlesion']->hasError() ? ' <span style="color: Red;">'.$e['idlesion']->getError().'</span>' : '' ?> </span> <?php echo $e['idlesion']->render() ?> </li> <li> <span> <?php echo $e['idsiegelesion']->renderLabel(); ?> <?php echo $e['idsiegelesion']->renderHelp() ?> <?php echo $e['idsiegelesion']->hasError() ? ' <span style="color: Red;">'.$e['idsiegelesion']->getError().'</span>' : '' ?> </span> <?php echo $e['idsiegelesion']->render() ?> </li> <li> <span> <?php echo $e['idcotelesion']->renderLabel(); ?> <?php echo $e['idcotelesion']->renderHelp() ?> <?php echo $e['idcotelesion']->hasError() ? ' <span style="color: Red;">'.$e['idcotelesion']->getError().'</span>' : '' ?> </span> <?php echo $e['idcotelesion']->render() ?> </li> <li> <?php echo link_to('Supprimer', 'declaration/delete_blessure?iddeclaration='.$form->getObject()->getIddeclaration().'&id='.$e->getObject()->getId(), array('method' => 'delete', 'confirm' => 'Etes vous sûr(e) ?')) ?> </li> </ul> <?php echo $e->renderHiddenFields();?> <?php endforeach ?> </fieldset> <?php } ?>
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
29
30
31
32
33
34
35
36
37
38 // Mon formulaire embarqué : class AffecterForm extends BaseAffecterForm { public function configure() { $this->setWidgets(array( 'idlesion' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Lesion'), 'add_empty' => true)), 'idsiegelesion' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('SiegeLesion'), 'add_empty' => true)), 'idcotelesion' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('CoteLesion'), 'add_empty' => true)), 'iddeclaration' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Declaration'), 'add_empty' => true)), )); $this->widgetSchema['iddeclaration'] = new sfWidgetFormInputHidden(); $this->setValidators(array( 'idlesion' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Lesion'), 'column' => 'idlesion', 'required' => true)), 'idcotelesion' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('CoteLesion'), 'column' => 'idcotelesion', 'required' => true)), 'idsiegelesion' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('SiegeLesion'), 'column' => 'idsiegelesion', 'required' => true)), 'iddeclaration' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Declaration'), 'column' => 'iddeclaration', 'required' => false)), )); $this->widgetSchema->setLabels(array( 'idlesion' => 'Lésion', 'idsiegelesion' => 'Siège de la lésion', 'idcotelesion' => 'Côté', 'iddeclaration' => 'Déclaration', )); $this->widgetSchema->setNameFormat('affecter[%s]'); $this->widgetSchema->setNameFormat('affecter_filters[%s]'); $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema); }
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 //Mon yaml de la relation embarquée : Affecter: connection: doctrine tableName: Affecter columns: idlesion: type: integer(4) notnull: true idcotelesion: type: integer(4) notnull: true idsiegelesion: type: integer(4) notnull: true iddeclaration: type: integer(4) notnull: true relations: Lesion:{onDelete: CASCADE, local:idlesion, foreign: idlesion} CoteLesion:{onDelete: CASCADE, local:idcotelesion, foreign: idcotelesion} SiegeLesion:{onDelete: CASCADE, local:idsiegelesion, foreign: idsiegelesion} Declaration:{onDelete: CASCADE, local: iddeclaration, foreign: iddeclaration}A la validation du formulaire principal, j'ai les erreurs de validation suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //Un extrait du yaml de mon Objet principal (celui du formulaire principal) : relations: Affecters: class: Affecter refClass: Affecter local: iddeclaration foreign: iddeclaration
0 [idlesion [Ce champ est requis.] idcotelesion [Ce champ est requis.] idsiegelesion [Ce champ est requis.]]
La particularité de ma relation est qu'elle fait appel à des tables liées : lesion, cotelesion et siegelesion
Quelqu'un aurait une idée ?
Merci beaucoup !
Partager