Bonjour à tous,
Voilà, j'ajoute des embedded forms (témoins) via ajax dans mon formulaire principal (déclaration). Tout fonctionne bien, à ceci près que lorsqu'il y a une erreur de validation, mon formulaire se réaffiche sans mes formulaires embarqués précédemment ajoutés.
Cela me paraît assez logique vu mon code, mais comment feriez vous pour palier à ce problème ?
Mon code :
DeclarationForm (formulaire principal) :
méthode bind :
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 public function addTemoin($num) { $unTemoin = new Temoin(); $temoins = $this->getObject()->Temoins; $nbTemoins = count($temoins); $this->getObject()->Temoins[$nbTemoins + 1] = $unTemoin; $newTemoinForm = new TemoinForm($unTemoin); unset($newTemoinForm["iddetmoin"]); $this->embeddedForms['new']->embedForm($num,$newTemoinForm); $this->embedForm('new', $this->embeddedForms['new']); }
Un extrait du configure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function bind(array $taintedValues = null, array $taintedFiles = null){ foreach($taintedValues['new'] as $key=>$newTemoin) { if (!isset($this['new'][$key])) { $this->addTemoin($key); } } parent::bind($taintedValues, $taintedFiles); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // le formulaire d'ajout $newTemoinForm = new TemoinForm(); $newTemoinForm->validatorSchema['nom']->setOption('required', false); $newTemoinForm->validatorSchema['prenom']->setOption('required', false); $numero = 0 ; $subForm = new sfForm(); $subForm->embedForm($numero, $newTemoinForm); $this->embedForm('new', $subForm); // les témoins déjà ajoutés if(!$this->isNew()){ $this->embedRelation('Temoins'); }
Le javascript dans mon formulaire :
Mon html :
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 <script type="text/javascript"> var temoins = <?php print_r($form['new']->count())?>; function addTemoins(num) { var r = $.ajax( { type: 'GET', url: '<?php echo url_for('declaration/addTemoinForm')?>'+'<?php echo ($form->getObject()->isNew()?'':'?id='.$form->getObject()->getIddeclaration()).($form->getObject()->isNew()?'?num=':'&num=')?>'+num, async: false }).responseText; return r; } $().ready(function() { $('button#add_temoin').click(function() { $("#extratemoins").append(addTemoins(temoins)); temoins = temoins + 1; }); });
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 <fieldset> <legend><?php echo('Temoins'); ?></legend> <div style="float:right"> <button id="add_temoin" type="button">+</button> </div> <ul class="subform" style='float:left;'> <li class="titreSubForm">Témoin</li> <li> <span> <?php echo $form['new'][0]['nom']->renderLabel(); ?> <?php echo $form['new'][0]['nom']->renderHelp(); ?> <?php echo $form['new'][0]['nom']->hasError() ? ' <span style="color: Red;">'.$form['new'][0]['nom']->getError().'</span>' : '' ?> </span> <?php echo $form['new'][0]['nom']->render() ?> </li> <li> <span> <?php echo $form['new'][0]['prenom']->renderLabel(); ?> <?php echo $form['new'][0]['prenom']->renderHelp(); ?> <?php echo $form['new'][0]['prenom']->hasError() ? ' <span style="color: Red;">'.$form['new'][0]['nom']->getError().'</span>' : '' ?> </span> <?php echo $form['new'][0]['prenom']->render() ?> </li> <?php echo $form['_csrf_token']->render();?> </ul> <div id="extratemoins"> </div> </fieldset> <?php if(isset($form['Temoins']) && count($form['Temoins']) > 0){ ?> <fieldset> <legend>Temoins déja ajoutés</legend> <?php $i = 0; ?> <?php foreach($form['Temoins'] as $e => $f): ?> <?php $i++; ?> <ul class="relation"> <li class="titreForm">Témoins de l'accident <?php echo $i ?> </li> <li> <span> <?php echo $f['nom']->renderLabel(); ?> <?php echo $f['nom']->renderHelp() ?> <?php echo $f['nom']->hasError() ? ' <span style="color: Red;">'.$f['nom']->getError().'</span>' : '' ?> </span> <?php echo $f['nom']->render() ?> </li> <li> <span> <?php echo $f['prenom']->renderLabel(); ?> <?php echo $f['prenom']->renderHelp() ?> <?php echo $f['prenom']->hasError() ? ' <span style="color: Red;">'.$f['prenom']->getError().'</span>' : '' ?> </span> <?php echo $f['prenom']->render() ?> <?php echo link_to('Supprimer', 'declaration/delete_temoin?iddeclaration='.$form->getObject()->getIddeclaration().'&idtemoin='.$f['idtemoin']->getValue(), array('method' => 'delete', 'confirm' => 'Etes vous sûr(e) ?')) ?> </li> </ul> <?php echo $f->renderHiddenFields();?> <?php endforeach ?> </fieldset> <?php } ?>
Partager