Desenvolvendo aplicações web com o framework cakephp
description
Transcript of Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework CAKEPHP
www.cakephp.org
Rodrigo Pletsch Aramburu
O que é um framework?
Muitas funcionalidades são compartilhados por uma família de aplicações(validação, persistência, etc ...)
Gasta-se muito tempo provendo e testando estas funcionalidades para cada aplicação
Um framework fornece um esqueleto de funcionalidades projetado para ser reutilizável
O que é o CakePHP Framework de desenvolvimento rápido em PHP
Utiliza a arquitetura MVC
ORM - Mapeamento Objeto Relacional
Utiliza URLs amigáveis(mod_rewrite)
Estrutura de diretórios simples e clara
Atualmente na versão 1.2.5 Stable
Arquitetura MVC
• A arquitetura MVC divide a aplicação em três partes para facilitar o desenvolvimento e manutenção:
–Model(Modelo)
–View(Visão)
–Controller(Controle)
Modelo(Model)
• Representam os dados da aplicação
• Normalmente é associado a uma tabela do banco de dados
• É responsável pela persistência dos dados(inserir, atualizar, deletar, buscar) e validação, associação ...
• Definimos os relacionamentos entre os dados
Modelo (Model)
Exemplo (/app/models/contato.php): <? class Contato extends AppModel{◦ var $name = "Contato";◦ var $validate = array(◦ "nome"=>array(◦ ‘rule’=>VALID_NOT_EMPTY,◦ ‘message’=>’O nome do contato deve ser preenchido’
◦ ); } ?>
Associações entre Associações entre Modelos(Model)Modelos(Model)
• hasOne (Um Usuário tem um Perfil. )
• belongsTo (Um Artigo pertence a uma Categoria)
• hasMany (Uma Categoria tem muitos Artigos)
• belongsAndHasMany (Um cliente loca vários DVDs , um DVD é locado por vários clientes)
Associações entre Associações entre Modelos(Model)Modelos(Model)
<?php
class Funcionario extends AppModel{
var $name = "Funcionario";
...
var $belongsTo = array("Empresa");
}
?>
----------------------------------------------------
<?php
class Empresa extends AppModel{
var $name = “Empresa";
...
var $hasMany = array(“Funcionario");
}
?>
Associações entre Associações entre Modelos(Model)Modelos(Model)
Controle(Controller)
• Responsável pelo tratamento das requisições feitas pelo cliente
• Executa a lógica especifica da aplicação
• As operações do banco de dados são feitas através de uma instância do modelo na camada de controle $this->Contato->save($dados)
• Define os dados a serem utilizados na Visão(view)
Controle (Controller)
• Exemplo(/app/controllers/contatos_controller.php):<?
class ContatosController extends AppController{var $name = "ContatosController";var $uses = array(“Contato”);var helpers=array(“Html”,”Form”,”Javascript”);
function infocontato($id){// algum codigo
}}
?>
Visão (View)
• Interface com usuário e/ou outro sistema;
• Fornece uma maneira de visualizar os dados;
• Saída diversa: HTML, PDF, …
Visão (View)
• Exemplo:(/app/view/contato/infocontato.ctp)
<h2>Informações do contato:</h2>
<p>Nome Contato: <? echo
$dados["Contato"]["nome"] ?></p>
<p>E-mail Contato: <? echo
$dados["Contato"][“email"] ?></p>
Uma requisição ao CakePHP
Uma requisição ao CakePHP
• Por exemplo: • http://localhost/contatos/infocontato/1
• – Controller: contatos• – Método/Action: infocontato• – Paramêtro: 1
Estrutura de Diretórios /raiz/◦ app
config controllers locale models plugins tmp vendors views webroot
css img js
◦ cake◦ docs◦ vendors
Helpers
• Hepers são objetos que fornecem funcionalidades genéricas para a view, como criar formulários, paginação de resultados , e diversas outras tags
• Os helpers são declarados no controle e só podem ser utilizados na Visão(View)
Helpers - Exemplos
• Método<?php echo
$html->image(‘/img/logo.png’,array(‘alt’=>’Logo’));
?>
• Código gerado<img src="/cake/img/logo.png" alt="Logo" />
Helpers - Exemplos• Método<?php
echo $html->link('Titulo Página', "http://ww.google.com.br", null, 'Deixar a página?');
?>
• Código gerado<a href="http://ww.google.com.br" onclick="return confirm('Deixar a
página?');">Titulo Página</a>
Components
• Lógica genérica para se utilizada nos controllers
• Upload de arquivos, Envio de e-mail, controle de acesso....
Component - Session
• O CakePHP fornece um Component para trabalhar com Sessões
• $this->Session->write(nome,valor);
• $this->Session->read(nome);
• $this->Session->setFlash(texto);
Buscando informações
• $this->Model->read(campos , id);
Array (
[Contato] => Array (
[nome] => Rodrigo
[email] => [email protected]
[telefone] => 987654321
[endereco] => 15 de Novembro
)
)
Buscando informações
• $this->Model->findAll();Array (
[0] => Array ( [Contato] => Array (
[id] => 1 [nome] => Rodrigo [email] => [email protected]
) ) [1] => Array (
[Contato] => Array ( [id] => 2 [nome] => Fulano [email] => [email protected]
)))
Layout (/app/view/layouts/default.ctp)<html>
<head>
<title>CakePHP - <?php echo $title_for_layout; ?></title>
</head>
<body>
<h1>Titulo da Página</h1>
<?php echo $content_for_layout; ?>
</body>
</html>
Passando valores para o view
• As variáveis criadas no controller não serão acessíveis na view
• Para passar valores para view utiliza-se o método:$this->set(‘nomeNaView’, $valor);
• Na view será disponível uma variável $nomeNaView que terá o valor contido em $valor
Formulários
• Para a criação de formulários o CakePHP fornece um Helper “Form”
<?php
echo $form->Create(‘Contato’);
$form->input(‘Contato.nome’, array(‘label’=>’Nome:’));
echo $form->end(‘Salvar’);
?>
Formulário Criado <form id="ContatoAdicionarForm" method="post"
action="/cake/contatos/add">
<fieldset style="display:none;"><input type="hidden" name="_method" value="POST" /></fieldset>
<div class="input text required">
<label for="ContatoNome">Nome:</label>
<input name="data[Contato][nome]" type="text" size="60" maxlength="100" value="" id="ContatoNome" />
</div>
<div class="submit">
<input type="submit" value="Salvar" />
</div>
</form>
Recebendo valores do Formulário
• Os valores enviados pelo formulário serão acessíveis através de $this->data
array ( [Contato] => Array (
[nome] => Rodrigo [email] => [email protected] [telefone] => 987654321 [endereco] => 15 de Novembro
)
)
Perguntas?