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'));
}
}
}
}
?> <?phpclass 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'));}}}}?>
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.
