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 = &quot;Contato&quot;; var $validate = array( &quot;nome&quot;=>array( ‘ rule’=>VALID_NOT_EMPTY, ‘ message’=>’O nome do contato deve ser preenchido’ ); } ?>
Associações entre 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 Modelos(Model) <?php class Funcionario extends AppModel{ var $name = &quot;Funcionario&quot;; ... var $belongsTo = array(&quot;Empresa&quot;); } ?> ---------------------------------------------------- <?php class Empresa extends AppModel{ var $name = “Empresa&quot;; ... var $hasMany = array(“Funcionario&quot;); } ?>
Associações entre 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 = &quot;ContatosController&quot;; 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[&quot;Contato&quot;][&quot;nome&quot;] ?></p> <p>E-mail Contato: <? echo $dados[&quot;Contato&quot;][“email&quot;] ?></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=&quot; /cake/img/logo.png &quot; alt=&quot;Logo&quot; />
Helpers - Exemplos Método <?php echo $html->link('Titulo Página', &quot;http://ww.google.com.br&quot;, null, 'Deixar a página?'); ?> Código gerado <a href=&quot; http://ww.google.com.br &quot; onclick=&quot;return confirm(&#039;Deixar a página?&#039;);&quot;>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] => rodrigo@g8si.com [telefone] => 987654321 [endereco] => 15 de Novembro ) )
Buscando informações $this->Model->findAll(); Array ( [0] => Array ( [Contato] => Array ( [id] => 1 [nome] => Rodrigo [email] => rodrigoaramburu@gmail.com ) ) [1] => Array ( [Contato] => Array ( [id] => 2 [nome] => Fulano [email] => fulano@gmail.com )) )
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=&quot;ContatoAdicionarForm&quot; method=&quot;post&quot; action=&quot;/cake/contatos/add&quot;> <fieldset style=&quot;display:none;&quot;><input type=&quot;hidden&quot; name=&quot;_method&quot; value=&quot;POST&quot; /></fieldset> <div class=&quot;input text required&quot;> <label for=&quot;ContatoNome&quot;>Nome:</label> <input name=&quot;data[Contato][nome]&quot; type=&quot;text&quot; size=&quot;60&quot; maxlength=&quot;100&quot; value=&quot;&quot; id=&quot;ContatoNome&quot; /> </div> <div class=&quot;submit&quot;> <input type=&quot;submit&quot; value=&quot;Salvar&quot; /> </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] => rodrigo@g8si.com [telefone] => 987654321 [endereco] => 15 de Novembro ) )
Perguntas? [email_address]

Desenvolvendo aplicações web com o framework cakephp

  • 1.
    Desenvolvendo aplicações webcom o framework CAKEPHP www.cakephp.org Rodrigo Pletsch Aramburu
  • 2.
    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
  • 3.
    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
  • 4.
    Arquitetura MVC Aarquitetura MVC divide a aplicação em três partes para facilitar o desenvolvimento e manutenção: Model(Modelo) View(Visão) Controller(Controle)
  • 5.
    Modelo(Model) Representam osdados 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
  • 6.
    Modelo (Model) Exemplo(/app/models/contato.php): <? class Contato extends AppModel{ var $name = &quot;Contato&quot;; var $validate = array( &quot;nome&quot;=>array( ‘ rule’=>VALID_NOT_EMPTY, ‘ message’=>’O nome do contato deve ser preenchido’ ); } ?>
  • 7.
    Associações entre 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)
  • 8.
    Associações entre Modelos(Model)<?php class Funcionario extends AppModel{ var $name = &quot;Funcionario&quot;; ... var $belongsTo = array(&quot;Empresa&quot;); } ?> ---------------------------------------------------- <?php class Empresa extends AppModel{ var $name = “Empresa&quot;; ... var $hasMany = array(“Funcionario&quot;); } ?>
  • 9.
  • 10.
    Controle(Controller) Responsável pelotratamento 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)
  • 11.
    Controle (Controller) Exemplo(/app/controllers/contatos_controller.php):<? class ContatosController extends AppController{ var $name = &quot;ContatosController&quot;; var $uses = array(“Contato”); var helpers =array(“Html”,”Form”,”Javascript”); function infocontato( $id ){ // algum codigo } } ?>
  • 12.
    Visão (View) Interfacecom usuário e/ou outro sistema; Fornece uma maneira de visualizar os dados; Saída diversa: HTML, PDF, …
  • 13.
    Visão (View) Exemplo:(/app/view/contato/infocontato.ctp)<h2>Informações do contato:</h2> <p>Nome Contato: <? echo $dados[&quot;Contato&quot;][&quot;nome&quot;] ?></p> <p>E-mail Contato: <? echo $dados[&quot;Contato&quot;][“email&quot;] ?></p>
  • 14.
  • 15.
    Uma requisição aoCakePHP Por exemplo: http://localhost/ contatos / infocontato / 1 – Controller: contatos – Método/Action: infocontato – Paramêtro: 1
  • 16.
    Estrutura de Diretórios/raiz/ app config controllers locale models plugins tmp vendors views webroot css img js cake docs vendors
  • 17.
    Helpers Hepers sãoobjetos 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)
  • 18.
    Helpers - ExemplosMétodo <?php echo $html->image(‘/img/logo.png’,array(‘alt’=>’Logo’)); ?> Código gerado <img src=&quot; /cake/img/logo.png &quot; alt=&quot;Logo&quot; />
  • 19.
    Helpers - ExemplosMétodo <?php echo $html->link('Titulo Página', &quot;http://ww.google.com.br&quot;, null, 'Deixar a página?'); ?> Código gerado <a href=&quot; http://ww.google.com.br &quot; onclick=&quot;return confirm(&#039;Deixar a página?&#039;);&quot;>Titulo Página</a>
  • 20.
    Components Lógica genérica para se utilizada nos controllers Upload de arquivos, Envio de e-mail, controle de acesso....
  • 21.
    Component - SessionO CakePHP fornece um Component para trabalhar com Sessões $this->Session->write(nome,valor); $this->Session->read(nome); $this->Session->setFlash(texto);
  • 22.
    Buscando informações $this->Model->read(campos, id); Array ( [Contato] => Array ( [nome] => Rodrigo [email] => rodrigo@g8si.com [telefone] => 987654321 [endereco] => 15 de Novembro ) )
  • 23.
    Buscando informações $this->Model->findAll();Array ( [0] => Array ( [Contato] => Array ( [id] => 1 [nome] => Rodrigo [email] => rodrigoaramburu@gmail.com ) ) [1] => Array ( [Contato] => Array ( [id] => 2 [nome] => Fulano [email] => fulano@gmail.com )) )
  • 24.
    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>
  • 25.
    Passando valores parao 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
  • 26.
    Formulários Para acriaçã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’); ?>
  • 27.
    Formulário Criado <form id=&quot;ContatoAdicionarForm&quot; method=&quot;post&quot; action=&quot;/cake/contatos/add&quot;> <fieldset style=&quot;display:none;&quot;><input type=&quot;hidden&quot; name=&quot;_method&quot; value=&quot;POST&quot; /></fieldset> <div class=&quot;input text required&quot;> <label for=&quot;ContatoNome&quot;>Nome:</label> <input name=&quot;data[Contato][nome]&quot; type=&quot;text&quot; size=&quot;60&quot; maxlength=&quot;100&quot; value=&quot;&quot; id=&quot;ContatoNome&quot; /> </div> <div class=&quot;submit&quot;> <input type=&quot;submit&quot; value=&quot;Salvar&quot; /> </div> </form>
  • 28.
    Recebendo valores doFormulário Os valores enviados pelo formulário serão acessíveis através de $this->data array ( [Contato] => Array ( [nome] => Rodrigo [email] => rodrigo@g8si.com [telefone] => 987654321 [endereco] => 15 de Novembro ) )
  • 29.