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&ucirc;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&eacute;sion',
                                               'idsiegelesion' => 'Si&egrave;ge de la l&eacute;sion',
                                               'idcotelesion' => 'C&ocirc;t&eacute;',
                                               'iddeclaration' => 'D&eacute;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}
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
A la validation du formulaire principal, j'ai les erreurs de validation suivantes :

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 !