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 :

Plus d'information à propos des traductions

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');
		}
	}
}
  1. function edit($id = null) {
  2. if (empty($this->data)) {
  3. $this->Post->id = $id;
  4. $this->data = $this->Post->read();
  5. } else {
  6. if ($this->Post->save($this->data['Post'])) {
  7. $this->flash('Votre post a été mis à jour.','/posts');
  8. }
  9. }
  10. }

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');
?>
  1. /app/views/posts/edit.ctp
  2. <h1>Editer le Post</h1>
  3. <?php
  4. echo $form->create('Post', array('action' => 'edit'));
  5. echo $form->hidden('id');
  6. echo $form->input('title');
  7. echo $form->input('body', array('rows' => '3'));
  8. echo $form->end('Sauvegarder le Post');
  9. ?>

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>
  1. /app/views/posts/index.ctp (lien d'édition ajouté)
  2. <h1>Blog posts</h1>
  3. <p><?php echo $html->link("Ajouter un Post", "/posts/add"); ?>
  4. <table>
  5. <tr>
  6. <th>Id</th>
  7. <th>Titre</th>
  8. <th>Action</th>
  9. <th>Créé le</th>
  10. </tr>
  11. <!-- Ici, nous bouclons sur le tableau $posts afin d'afficher les informations des posts -->
  12. <?php foreach ($posts as $post): ?>
  13. <tr>
  14. <td><?php echo $post['Post']['id']; ?></td>
  15. <td>
  16. <?php echo $html->link($post['Post']['title'],'/posts/view/'.$post['Post']['id']);?>
  17. </td>
  18. <td>
  19. <?php echo $html->link('Supprimer', "/posts/delete/{$post['Post']['id']}",
  20. null, 'Etes-vous sûr ?')?>
  21. <?php echo $html->link('Editer', '/posts/edit/'.$post['Post']['id']);?>
  22. </td>
  23. <td><?php echo $post['Post']['created']; ?></td>
  24. </tr>
  25. <?php endforeach; ?>
  26.  
  27. </table>