Welcome to the Cookbook

loading...

10.1.9 Adicionando Posts

Ler a partir da base de dados e exibir os posts foi um grande começo, mas precisamos permitir também que os usuários adicionem novos posts.

Primeiramente, comece criando uma action add() no PostsController:

<?php
class PostsController extends AppController {
	var $name = 'Posts';

	function index() {
		$this->set('posts', $this->Post->find('all'));
	}

	function view($id) {
		$this->Post->id = $id;
		$this->set('post', $this->Post->read());

	}

	function add() {
		if (!empty($this->data)) {
			if ($this->Post->save($this->data)) {
				$this->Session->setFlash('Seu post foi salvo.');
				$this->redirect(array('action' => 'index'));
			}
		}
	}
}
?>
  1. <?php
  2. class PostsController extends AppController {
  3. var $name = 'Posts';
  4. function index() {
  5. $this->set('posts', $this->Post->find('all'));
  6. }
  7. function view($id) {
  8. $this->Post->id = $id;
  9. $this->set('post', $this->Post->read());
  10. }
  11. function add() {
  12. if (!empty($this->data)) {
  13. if ($this->Post->save($this->data)) {
  14. $this->Session->setFlash('Seu post foi salvo.');
  15. $this->redirect(array('action' => 'index'));
  16. }
  17. }
  18. }
  19. }
  20. ?>

Aqui está o que a action add() faz: se os dados submetidos do formulário não estiverem vazios, tenta salvar os dados usando o model Post. Se, por alguma razão ele não salvar, apenas renderize a view. Isto nos dá uma oportunidade de mostrar erros de validação e outros avisos ao usuário.

Quando um usuário utilizar um formulário para submeter (POSTar) dados para sua aplicação, esta informação fica disponível em $this->data. Você pode usar as funções pr() ou debug para exibir os dados se você quiser conferir como eles se parecem.

Nós usamos o método setFlash() do componente Session para definir uma variável de sessão com uma mensagem a ser exibida na página depois de ser redirecionada. No layout, nós temos um código $session->flash() que exibe a mensagem e limpa a variável de sessão correspondente. O método redirect do controller redireciona para outra URL. O parâmetro array('action'=>'index) é convertido para a URL /posts, i.e., a action index do controller posts. Você pode conferir a função Router::url na API para ver os formatos que você pode usar ao especificar uma URL para várias funções do CakePHP.

Chamar o método save() irá verificar por erros de validação e abortar o salvamento se algum erro ocorrer. Vamos falar mais sobre erros de validação e sobre como manipulá-los nas seções seguintes.