EmbedRelation erreur de validation
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:
1 2 3 4
| // Les blessures déjÃ* affectées
if (!$this->isNew()) {
$this->embedRelation('Affecter');
} |
Code:
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:
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:
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:
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 !