Bonjour,
je crée un site sur lequel je voudrais pouvoir modifier plusieurs lignes d'un modèle:
- il y a le modèle Region qui est lié par un hasMany au modèe Echelon
- le modèle Echelon lié au modèle Region par un belongsTo
Je voudrais pouvoir modifier tous les echelons sur une seule page, en un coup.
Voilà mon code au niveau controller:
Code PHP : 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 public function edit($id = null){ if (!$id) { throw new NotFoundException(__('Région invalide')); } $Region = $this->loadModel('Region',$id); if(!$Region){ throw new NotFoundException(__('Région invalide')); } if ($this->request->is(array('post','put'))) { $this->Region->id = $id; /* if ($this->Region->save($this->request->data)) { $this->Session->setFlash(__('Région mise à jour')); return $this->redirect(array('action'=>'index')); } */ $this->Session->setflash(__('Impossible de mettre les échelons.')); } $this->Echelon->unbindModel( array('belongsTo' => array('Region'))); $echelons = $this->Echelon->findAllByRegion_id($id); if (!$this->request->data) { $this->request->data = $echelons; } $this->set('echelons', $echelons); }
et le code de ma vue :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <!-- Fichier : /app/View/Echelons/edit.ctp --> <h1>Editer les échelons</h1> <?php echo $this->Form->create('Echelon'); echo $this->Form->input('Region.id',array('type'=>'hidden')); $i = 0; foreach ($echelons as $echelon) { echo $this->Form->input('Echelon.'.$i.'.id',array('type'=>'hidden')); echo $this->Form->input('Echelon.'.$i.'.region_id',array('label'=>'Region id')); echo $this->Form->input('Echelon.'.$i.'.echelon', array('label'=>'Echelon')); echo $this->Form->input('Echelon.'.$i.'.montant',array('label'=>'Montant')); $i++; } echo $this->Form->end('Sauvegarder');
Le tout me crée un truc super moche en HTML (fraction à multiplier par le nombre de boucle):
Code HTML : 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 <h1>Editer les échelons</h1> <form action="/cakephp/Echelons/edit/1" id="EchelonEditForm" method="post" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST"/></div><input type="hidden" name="data[Region][id]" id="RegionId"/><input type="hidden" name="data[Echelon][0][id]" id="Echelon0Id"/><div class="input select required"><label for="Echelon0RegionId">Region id</label><select name="data[Echelon][0][region_id]" id="Echelon0RegionId" required="required"> </select></div><div class="input select"><label for="Echelon0Echelon">Echelon</label><select name="data[Echelon][0][echelon]" id="Echelon0Echelon"> </optgroup> <option value="montant">394</option> <option value="echelon">0</option> <optgroup label="Echelon"> <optgroup label="1"> </optgroup> <option value="montant">1496</option> <optgroup label="Echelon"> </optgroup> <optgroup label="2"> </optgroup> <option value="montant">2253</option> <option value="region_id">1</option> <optgroup label="Echelon"> </optgroup> <optgroup label="3"> </optgroup> <option value="montant">2887</option> <option value="region_id">1</option> <optgroup label="Echelon"> </optgroup> <optgroup label="4"> </optgroup> <option value="montant">3519</option> <option value="region_id">1</option> <optgroup label="Echelon"> </optgroup> <optgroup label="5"> </optgroup> <option value="montant">4040</option> <option value="region_id">1</option> <optgroup label="Echelon"> </optgroup> <optgroup label="6"> </optgroup> <option value="montant">6300</option> <option value="region_id">1</option> <option value="id">7</option> <optgroup label="Echelon"> </optgroup>
Donc, ma question est: je n'ai jamais voulu tous ces optgroups, et je ne vois pas trop d'où vient le problème, vous pourriez m'aider?
Partager