lucaswxp 22 Denunciar post Postado Fevereiro 16, 2010 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