10.1.12 Posts bearbeiten
Kümmern wir uns jetzt um das Bearbeiten von Posts. Wir benötigen eine neue Action sowie ein neues View.
Die edit()-action des PostsControllers sollte so aussehen:
function edit($id = null) {
$this->Post->id = $id;
if (empty($this->data)) {
$this->data = $this->Post->read();
} else {
if ($this->Post->save($this->data)) {
$this->Session->setFlash('Your post has been updated.');
$this->redirect(array('action' => 'index'));
}
}
}
function edit($id = null) {$this->Post->id = $id;if (empty($this->data)) {$this->data = $this->Post->read();} else {if ($this->Post->save($this->data)) {$this->Session->setFlash('Your post has been updated.');$this->redirect(array('action' => 'index'));}}}
Diese Methode überprüft die abgeschickten Formulardaten. Wurde nichts übergeben, findet die Methode das Post und übergibt es dem View. Wenn etwas übergeben wurde, wird versucht die Daten mit Hilfe des Post-model zu speichern (Oder leitet zurück zum View und zeigt dem Benutzer einen Fehler).
Das Edit-view sollte in etwa so aussehen:
/app/views/posts/edit.ctp
<h1>Edit Post</h1>
<?php
echo $form->create('Post', array('action' => 'edit'));
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->input('id', array('type'=>'hidden'));
echo $form->end('Save Post');
?>
/app/views/posts/edit.ctp<h1>Edit Post</h1><?phpecho $form->create('Post', array('action' => 'edit'));echo $form->input('title');echo $form->input('body', array('rows' => '3'));echo $form->input('id', array('type'=>'hidden'));echo $form->end('Save Post');?>
Dieses View zeigt das Formular zum bearbeiten und eventuell auftretende Fehlermeldungen.
Eine Anmerkung: CakePHP geht davon aus, dass ein Model bearbeitet werden soll, falls eine 'id' übergeben wird. Sollte keine 'id' übergeben werden, geht Cake davon aus das ein neues Model angelegt werden soll und ruft die save()-Methode auf.
Nun können wir noch das Index-View mit den Bearbeiten-Links ergänzen:
/app/views/posts/index.ctp (edit links added)
<h1>Blog posts</h1>
<p><?php echo $html->link("Add Post", array('action'=>'add')); ?>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Action</th>
<th>Created</th>
</tr>
<!-- Here's where we loop through our $posts array, printing out post info -->
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo $html->link($post['Post']['title'],array('action'=>'view', 'id'=>$post['Post']['id']));?>
</td>
<td>
<?php echo $html->link(
'Delete',
array('action'=>'delete', 'id'=>$post['Post']['id']),
null,
'Are you sure?'
)?>
<?php echo $html->link('Edit', array('action'=>'edit', 'id'=>$post['Post']['id']));?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
</table>
/app/views/posts/index.ctp (edit links added)<h1>Blog posts</h1><p><?php echo $html->link("Add Post", array('action'=>'add')); ?><table><tr><th>Id</th><th>Title</th><th>Action</th><th>Created</th></tr><!-- Here's where we loop through our $posts array, printing out post info --><?php foreach ($posts as $post): ?><tr><td><?php echo $post['Post']['id']; ?></td><td><?php echo $html->link($post['Post']['title'],array('action'=>'view', 'id'=>$post['Post']['id']));?></td><td><?php echo $html->link('Delete',array('action'=>'delete', 'id'=>$post['Post']['id']),null,'Are you sure?')?><?php echo $html->link('Edit', array('action'=>'edit', 'id'=>$post['Post']['id']));?></td><td><?php echo $post['Post']['created']; ?></td></tr><?php endforeach; ?></table>


























