10.1.12 Editer des Posts
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Edition de posts : allons-y ! Vous êtes un pro de CakePHP maintenant, vous devriez donc avoir adopté le principe. Créer l'action puis la vue. Voici à quoi devrait ressembler l'action edit() du Contrôleur Posts :
function edit($id = null) {
if (empty($this->data)) {
$this->Post->id = $id;
$this->data = $this->Post->read();
} else {
if ($this->Post->save($this->data['Post'])) {
$this->flash('Votre post a été mis à jour.','/posts');
}
}
}
function edit($id = null) {if (empty($this->data)) {$this->Post->id = $id;$this->data = $this->Post->read();} else {if ($this->Post->save($this->data['Post'])) {$this->flash('Votre post a été mis à jour.','/posts');}}}
Cette action contrôle d'abord les données soumises par le formulaire. Si rien n'a été envoyé, elle trouve le post et transmet les données à la vue. Si des données ont été transmises, elle essaye d'enregistrer les données en utilisant le modèle Post (ou retourne en arrière et affiche à l'utilisateur les erreurs de validation).
La vue "edit" devrait ressembler à quelque chose comme cela :
/app/views/posts/edit.ctp
<h1>Editer le Post</h1>
<?php
echo $form->create('Post', array('action' => 'edit'));
echo $form->hidden('id');
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->end('Sauvegarder le Post');
?>
/app/views/posts/edit.ctp<h1>Editer le Post</h1><?phpecho $form->create('Post', array('action' => 'edit'));echo $form->hidden('id');echo $form->input('title');echo $form->input('body', array('rows' => '3'));echo $form->end('Sauvegarder le Post');?>
Cette vue affiche le formulaire d'édition (avec les valeurs pré-remplies), ainsi que les messages d'erreur de validation nécessaires.
Une chose à noter ici : CakePHP supposera que vous éditez un modèle si le champ 'id' est présent dans le tableau de données. Si aucun 'id' n'est présent (ce qui
revient à notre vue "add"), Cake supposera que vous insérez un nouveau modèle
lorsque save() sera appelé.
Vous pouvez maintenant mettre à jour votre vue "index" avec des liens pour éditer des posts particuliers :
/app/views/posts/index.ctp (lien d'édition ajouté)
<h1>Blog posts</h1>
<p><?php echo $html->link("Ajouter un Post", "/posts/add"); ?>
<table>
<tr>
<th>Id</th>
<th>Titre</th>
<th>Action</th>
<th>Créé le</th>
</tr>
<!-- Ici, nous bouclons sur le tableau $posts afin d'afficher les informations des posts -->
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo $html->link($post['Post']['title'],'/posts/view/'.$post['Post']['id']);?>
</td>
<td>
<?php echo $html->link('Supprimer', "/posts/delete/{$post['Post']['id']}",
null, 'Etes-vous sûr ?')?>
<?php echo $html->link('Editer', '/posts/edit/'.$post['Post']['id']);?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
</table>
/app/views/posts/index.ctp (lien d'édition ajouté)<h1>Blog posts</h1><p><?php echo $html->link("Ajouter un Post", "/posts/add"); ?><table><tr><th>Id</th><th>Titre</th><th>Action</th><th>Créé le</th></tr><!-- Ici, nous bouclons sur le tableau $posts afin d'afficher les informations des posts --><?php foreach ($posts as $post): ?><tr><td><?php echo $post['Post']['id']; ?></td><td><?php echo $html->link($post['Post']['title'],'/posts/view/'.$post['Post']['id']);?></td><td><?php echo $html->link('Supprimer', "/posts/delete/{$post['Post']['id']}",null, 'Etes-vous sûr ?')?><?php echo $html->link('Editer', '/posts/edit/'.$post['Post']['id']);?></td><td><?php echo $post['Post']['created']; ?></td></tr><?php endforeach; ?></table>
