Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucaswxp

[Resolvido] [TUTORIAL] Iniciando no CakePHP - Final

Recommended Posts

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.
 }
 }
}
?>

Primeiro checamos se não existem dados para serem salvos (utilizando a função empty()), se existirem salvamos, caso contrario não fazemos nada (apenas exibimos o formulário).

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

Agora a view para exibir os resultados:

 

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

Os dados sempre virão nesta hierarquia: $dados[x][Model][campo_da_tabela]. Por isso utilizamos o foreach.

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

Tudo é muito intuitivo com cakephp =)

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

Perceba que utilizamos o mesmo método para salvar dados e para atualizar, o Model::save(). Se você especificar o ID no segundo parâmetro, então o cakephp saberá que você quer editar.

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.