Welcome to the Cookbook

loading...

10.1.12 Editando Posts

Edição de Posts: aqui vamos nós. A partir de agora você já é um profissional do CakePHP, então você deve ter identificado um padrão. Criar a action e então criar a view. Aqui está como o código da action edit() do PostsController deve se parecer:

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('Seu post foi atualizado.');
			$this->redirect(array('action' => 'index'));
		}
	}
}
  1. function edit($id = null) {
  2. $this->Post->id = $id;
  3. if (empty($this->data)) {
  4. $this->data = $this->Post->read();
  5. } else {
  6. if ($this->Post->save($this->data)) {
  7. $this->Session->setFlash('Seu post foi atualizado.');
  8. $this->redirect(array('action' => 'index'));
  9. }
  10. }
  11. }

Esta action primeiro verifica os dados submetidos do formulário. Se nada tiver sido submetido, ele recupera o Post e o envia para a view. Se algum dado tiver sido submetido, a action tenta salvar os dados usando o model Post (ou manipula-os mostra os erros de validação de volta para o usuário).

A view edit pode ser algo parecido com isto:

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

Esta view exibe o formulário de edição (com os valores populados), juntamente com quaisquer mensagens de erro de validação.

Uma coisa a atentar aqui: o CakePHP vai assumir que você está editando um model se o campo 'id' estiver presente no array de dados. Se nenhum 'id' estiver presente (como a view add de inserção), o Cake irá assumar que você está inserindo um novo model quando o método save() for chamado.

Você agora pode atualizar sua view index com os links para editar os posts específicos:

/app/views/posts/index.ctp (com links de edição incluídos)
	
<h1>Posts do Blog</h1>
<p><?php echo $html->link("Add Post", array('action'=>'add')); ?>
<table>
	<tr>
		<th>Id</th>
		<th>Título</th>
                <th>Ação</th>
		<th>Criado em</th>
	</tr>

<!-- Aqui é onde varremos nosso array de $posts, exibindo informações de cada post -->

<?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(
				'Excluir', 
				array('action'=>'delete', 'id'=>$post['Post']['id']), 
				null, 
				'Deseja realmente excluir?'
			)?>
			<?php echo $html->link('Editar', array('action'=>'edit', 'id'=>$post['Post']['id']));?>
		</td>
		<td><?php echo $post['Post']['created']; ?></td>
	</tr>
<?php endforeach; ?>

</table>
  1. /app/views/posts/index.ctp (com links de edição incluídos)
  2. <h1>Posts do Blog</h1>
  3. <p><?php echo $html->link("Add Post", array('action'=>'add')); ?>
  4. <table>
  5. <tr>
  6. <th>Id</th>
  7. <th>Título</th>
  8. <th>Ação</th>
  9. <th>Criado em</th>
  10. </tr>
  11. <!-- Aqui é onde varremos nosso array de $posts, exibindo informações de cada post -->
  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'],array('action'=>'view', 'id'=>$post['Post']['id']));?>
  17. </td>
  18. <td>
  19. <?php echo $html->link(
  20. 'Excluir',
  21. array('action'=>'delete', 'id'=>$post['Post']['id']),
  22. null,
  23. 'Deseja realmente excluir?'
  24. )?>
  25. <?php echo $html->link('Editar', array('action'=>'edit', 'id'=>$post['Post']['id']));?>
  26. </td>
  27. <td><?php echo $post['Post']['created']; ?></td>
  28. </tr>
  29. <?php endforeach; ?>
  30.  
  31. </table>