Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Criamos o CRUD (Create Read Upade Delete), e terminamos a serie de tutoriais para iniciantes.
Pré-requisitos
* Ter o módulo mod_rewrite habilitado
* Um conhecimento razoável sobre Orientação a Objeto
Conteúdo
Começando
Finalmente vamos criar nosso blog! Já estamos no tutorial final desta série ;D
Todos os dados submetidos pelos formulário ficam na propriedade Controller::$data. Os dados estão organizados em array. Se você submeter um formulário que tenha os campos "titulo" e "texto", se parecerá algo como isso:
Array
(
[NomeDoModel] => Array
(
[titulo] => Alguma coisa
[texto] => Outra coisa
)
)Nos vamos utilizar uma mesma action para exibir o formulário e salvar os seus dados.Para sabermos quando fazer qual devemos considerar:
1 - Se $this->data for um array vazio, significa que o formulário
ainda não foi submetido, portanto devemos apenas mostrar o formulário (não
salvaremos nada, pois não existe algo à ser salvo).
2 - Se $this->data não estiver vazio, significa que o formulário foi submetido
e devemos salvar os dados submetidos no DB e redirecionar o usuário para
uma mensagem de sucesso ou falha.
Resumindo:
Quando Controller::$data ESTIVER VAZIO então o formulário não foi submetido
Quando Controller::$data NÃO ESTIVER VAZIO entao o formulário foi submetido
Vamos ao código:
<?php
class NoticiasController extends AppController {
var $name = 'Noticias';
var $pageTitle = 'Bloguizinho';
/**
Este action exibe o formulário para cadastro e também
salva os dados submetidos por este formulário.
*/
function cadastrar(){
// Caso o formulário foi submetido
if(!empty($this->data)){
// Utilizamos um método de nosso Model chamado "save()"
if($this->Noticia->save($this->data))
// Gravamos um valor em sessão para ser exibido no view
$this->Session->setFlash('Cadastrado com sucesso.');
else
$this->Session->setFlash('Um erro ocorreu.');
}else{
// Caso o formulário não foi submetido entra aqui.
}
}
}
?>Utilizamos um método chamado Model::save() para salvar os dados, pode receber até 3 parâmetro, porém usamos apenas o primeiro aqui. Ele recebe um array associativo que o CakePHP cuida de arquiteturar para nós.
Agora precisamos criar a view cadastrar, tudo muito bem comentado:
app/views/noticias/cadastrar.ctp
<h1>Cadastrar nova notícia</h1>
<p>Veja como é fácil criar um formulário com o FormHelper.</p>
<?php
/**
Exibe a mensagem definida no controller via Controller::setFlash();
*/
$session->flash('flash');
// Para onde o formulário submeterá
$para = array('controller' => 'noticias', 'action' => 'cadastrar');
// Imprimimos um tag <form>, e dizemos ao cake a qual Model este pertence (Noticia)
// e para onde enviar os dados submetidos
echo $form->create('Noticia' , array('url' => $para));
/**
Começamos aqui a exibir os campos do formulário (Inputs, Selects, Checkboxes etc...)
Criamos um input para a coluna "titulo" da tabela/model de noticias/Noticia.
Siga o padrão "Model.nome_do_campo".
Exemplo: 'Usuario.senha', 'Categoria.ativa', 'Arquivo.titulo'
*/
echo $form->input('Noticia.titulo');
// Criamos um input para a coluna "texto"
echo $form->input('Noticia.texto');
// Criamos um input do tipo "submit" com valor especificado abaixo e fechamos a tag "</form>"
echo $form->end('Cadastrar noticia');
?>
E pronto! Nossa action cadastrar está pronta! Você já pode cadastrar noticias à vontade.
Agora vamos fazer uma página index onde exibiremos todas as noticias cadastradas.
Utilizaremos o método Controller::paginate() para paginar entre todas as noticias cadastradas, e temos que lembrar de colocar o helper Paginator na lista de helpers que utilizaremos na view, veremos mais sobre helpers em outro artigo:
...
var $helpers = array('Paginator');
function index(){
// Dizemos que vamos paginar os dados do modelo 'Noticia'
$this->set('dados', $this->paginate('Noticia'));
}
...<?php
// Utilizamos um foreach para percorrer em todos os resultados
foreach($dados as $item){
echo 'ID: ';
echo $item['Noticia']['id'];
echo '<br />Titulo: ';
echo $item['Noticia']['titulo'];
echo '<br />Texto: ';
echo $item['Noticia']['texto'];
echo '<br /><br />';
}
// Mostramos o rodapé da paginação com o paginator helper
echo $paginator->prev('Anterior');
echo $paginator->numbers();
echo $paginator->next('Proximo');
?>No final nos usamos o PaginatorHelper, definido em Controller::$helpers, para mostrar a "barra" para o usuário navegar entre os resultados.
Agora vamos criar uma action para deletar, recebendo o id como parâmetro.
...
function deletar($id = null){
// deletamos a noticia (model) pelo seu $id
if($this->Noticia->delete($id)){
$this->Session->setFlash('Deletado com sucesso!');
}
}
...Para deletar uma noticia com o id 15, por exemplo, acessaríamos: http://meusite.com/noticias/deletar/15
E por ultimo, a action para editar os dados.
...
function editar($id = null){
// Se tiver dados em $this->data, salvamos estes dados
if(!empty($this->data)){
$this->Noticia->save($this->data, $id);
// Caso contrario nos COLOCAMOS OS DADOS EM $this->data, para eles ficarem à mostra no form
}else{
// O primeiro parâmetro é para o caso de você querer um campo especifico (como "texto", por exemplo)
$this->data = $this->Noticia->read(null , $id);
}
}
...A view da action editar será a mesma de cadastrar, apenas com algumas modificações (a variável $para e Form::end())
<?php
/**
Exibe a mensagem definida no controller via Controller::setFlash();
*/
$session->flash('flash');
// Para onde o formulário submeterá
$para = array('controller' => 'noticias', 'action' => 'editar');
echo $form->create('Noticia' , array('url' => $para));
echo $form->input('Noticia.titulo');
// Criamos um input para a coluna "texto"
echo $form->input('Noticia.texto');
// Criamos um input do tipo "submit" com valor especificado abaixo e fechamos a tag "</form>"
echo $form->end('Atualizar noticia');
?>
E pronto! Agora você já pode atualizar suas noticias pela url: http://meusite.com/editar/13, onde "13" é o id.
Bom pessoal, é isso aí! Acabamos nossa série para iniciantes. Mas podem esperar tutoriais mais avançados futuramente :)
Fonte: http://lucaspelegrino.com
Carregando comentários...