CakePHP Vantagens x Desvantagens
Laura Lopes Formada em Publicidade e Propaganda pela PUC, também estudou Ciência da Computação na UFRGS. Trabalha com web comercialmente desde 1996. Já trabalhou em diversos provedores de Internet e agências web e hoje tem sua própria empresa, onde trabalha com treinamento e consultoria em sites e sistemas. É instrutora na TargetTrust desde novembro de 2006. E-mail: lauralopes@targettrust.com.br.
Tópicos O que é o CakePHP Conceitos básicos Vantagens Desvantagens Requisitos Instalação Configuração Aplicação de exemplo
O que é o CakePHP
O que é o CakePHP CakePHP é um framework open source de desenvolvimento para PHP. Possibilita aos programadores PHP de todos os níveis desenvolverem aplicações robustas rapidamente. Usando convenções ao invés de configurações, reduz o custo do desenvolvimento e ajuda os desenvolvedores a escreverem menos código.
O que é o CakePHP CakePHP é um framework que usa padrões de desenvolvimento conhecidos como  ActiveRecord  e  MVC . A idéia principal é ser um framework estruturado que permita a usuários PHP de todos os níveis desenvolver aplicações web robustas sem perda da flexibilidade.
Conceitos básicos
Design Patterns Os padrões de projeto são muito úteis para resolver problemas de modelagem de projetos se usados de forma adequada. Padrões de projetos são soluções para problemas que alguém um dia teve e resolveu aplicando um modelo que foi documentado e que você pode adaptar integralmente ou de acordo com necessidade de sua solução.
Design Patterns O padrão de modelo MVC, que é o mais utilizado em arquituras web, tem por objetivo básico separar a lógica de negócio da apresentação. O grande desafio das equipes de desenvolvimento de aplicações é cada vez mais produzir aplicativos seguros, eficientes, de fácil manutenção, reutilizáveis e em prazos cada vez menores.
O Modelo MVC Model View Controller O modelo de três camadas fisícas (3-tier) divide um aplicativo de modo que a lógica de negócio resida no meio das três camadas físicas. Isto é chamado de camada física intermediária ou camada física de negócios. A maior parte do código escrito reside na camada de apresentação e de negócio.
MVC Modelo : gerencia os dados da aplicação Visão : gerencia a saída gráfica e textual da parte da aplicação visível ao usuário Controle : interpreta as entradas de mouse e teclado do usuário, comandando a Visão e o Modelo para se alterarem de forma apropriada.
MVC
Vantagens
Vantagens Independência entre os componentes; eficiência; escalabilidade; reutilização; licença flexível (MIT); compatibilidade com PHP4 e PHP5; geração de CRUD para interação com BD; arquitetura MVC; validações; templates; ferramentas que auxiliam gerar Javascript, AJAX, forms HTML, etc; comunidade ativa; funciona em qualquer subdiretório web, com pouca configuração do Apache.
Desvantagens
Desvantagens Requer uma quantidade maior de tempo para analisar e modelar o sistema; Requer pessoal especializado; Não é aconselhável para pequenas aplicações.
Requisitos
Requisitos Servidor HTTP. Apache com mod_rewrite. PHP 4.3.2 ou superior. Tecnicamente um banco de dados não é obrigatório, mas nós imaginamos que a maioria das aplicações irão utilizar um. CakePHP suporta uma variedade de banco de dados: MySQL (4 ou superior) − Oracle PostgreSQL − SQLite Firebird DB2 − ODBC Microsoft SQL Server − ADOdb
Instalação
Preparando a instalação CakePHP é rápido e fácil de instalar. Vamos focar na configuração com Apache (porque ele é o mais comum). A preparação para a instalação consiste dos seguintes passos: Baixar uma cópia do CakePHP Configurar seu servidor web para manipular php, se necessário Checar permissão de arquivos
Apache e PHP Existem maneiras simples de instalar o apache e o PHP no seu computador. Eu uso o XAMPP   http://www.apachefriends.org/en/xampp.html Mas existem outros aplicativos que facilitam a instalação no Windows: Wamp   http://www.wampserver.com/   EasyPHP   http://sourceforge.net/projects/quickeasyphp/
Baixando o CakePHP Há duas maneiras de pegar uma cópia do CakePHP, Primeiro: você pode baixar o arquivo (zip/tar.gz/tar.bz2) ou você pode baixar o código do repositório SVN. Para pegar a cópia estável, visite o site  http://www.cakephp.org . O site CakeForge contém links para muitos outros projetos CakePHP, incluindo plugins e aplicações para CakePHP. As versões de CakePHP estão disponíveis em  http://cakeforge.org/projects/cakephp .
Permissões O CakePHP usa o diretório /app/tmp para diversas operações. Exemplos: descritivos dos modelos fazer cache de visões e informações das sessões Assim, tenha certeza que o diretório /app/tmp na instalação do seu cake permite escrita pelo usuário do servidor de web.
Instalação No Windows: Descompacte o arquivo em uma pasta cake na raiz do seu servidor web. No Ubuntu: tar xfvj cake_1.1.10.3825.tar.bz2 mv mv cake_1.1.10.3825 /var/www/cake Testar no navegador no endereço: http://localhost/cake
Configuração
Primeiro acesso
Apache and mod_rewrite (and .htaccess) Caso o arquivo de estilos não tenha aparecido, você precisa configurar o arquivo httpd.conf do Apache. Localize   <Directory />  e faça as alterações: <Directory /> Options FollowSymLinks AllowOverride All # Order deny,allow # Deny from all </Directory>
Configuração Apache É necessário duas configurações: o mod_rewrite e o AllowOverride precisam estar ativos. Alterar o httpd.conf (apache2.conf no Ubuntu) e descomentar ou adicionar as linhas : LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c Adicionar a linha abaixo no DocumentRoot e reiniciar o Apache: AllowOverride all
mod_rewrite Tenha certeza de que está carregando o mod_rewrite corretamente. Você deve encontrar algo como: LoadModule rewrite_module libexec/apache2/mod_rewrite.so Em muitos sistemas esta linha estará comentada (com o # na frente). Tire o # e salve o arquivo. Reinicie o servidor Apache.
Ajuste do código de segurança Trocar o valor de 'Security.salt' no arquivo app/config/core.php para um valor específico da sua aplicação Não importa o que você vai colocar, desde que seja único Configure::write('Security.salt', 'Cf0*&IRUa2GVhz4DRoFmJ9Yq9vr3%');
Alterações de língua Arquivo core.php (\app\config\core.php) Configure::write('App.encoding', 'ISO-8859-1');
Configuração do banco de dados Altere o arquivo: /app/config/database.php.default para database.php. Substitua os valores pelos dados do seu banco de dados: var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'livros', 'prefix' => '', );
Tudo verde!
Favicon Arquivo favicon.ico na pasta: \app\webroot\favicon.ico Antes: Depois:
Diretórios /app - aplicação /config – arquivos de configuração, DB, etc /controllers – controladores da aplicação /index.php – página inicial da aplicação /models – modelos da aplicação /plugins /tmp – usado para chache e logs /vendors – bibliotecas de terceiros /views – visões da aplicação /elements – elementos, pedaços da visão /errors – páginas de erros customizadas /helpers – ajudantes para gerar código /layots – arquivos de layout /pages – visões estáticas /scaffolds /webroot – DocumentRoot para aplicação /css – arquivos css /files – arquivos comuns /img – imagens /js – Javascripts /cake – código fonte do cake /vendors – aplicações de terceiros
Aplicação de exemplo
Desenvolvendo a aplicação Um professor gostaria de uma aplicação web simples para manter-se informado sobre os livros que empresta a seus alunos. No sistema ele pode visualizar e alterar os alunos cadastrados e também os empréstimos.
A modelagem
Padronização e não configuração O CakePHP segue algumas regras de padronização para a base de dados: Todas as tabelas devem estar no plural A chave primária para todas as tabelas deve ser o campo “id” Para utilizar chave estrangeira, deve possuir nome da tabela no singular acrescido do campo id. Ex: “usuario_id”. O relacionamento “n – n”, deve ser organizado em ordem alfabética, e o primeiro nome no singular acrescido de um “_” nome segunda tabela plural. Ex: livro_usuarios; Se você quiser que ele atualize  automagicamente  as datas de criação e modificação de um registro, basta criar a tabela com as colunas created (para data de criação) e modified (para data de modificação)
Modelagem Adaptada
Criando o banco Após fazer a modelagem, acesse o banco e carregue o SQL de criação do banco. Considerando o XAMPP instalado, acesse: http://localhost/phpmyadmin/
Configurações Faça as configurações necessárias.
Iniciando a aplicação O cake possui uma excelente ferramenta para geração da aplicação e de várias partes de código. A ferramenta chama-se  Bake .
Adicionando o Bake ao path do Windows Considerando o uso do XAMPP Windows XP: Clique com o botão direito do mouse em &quot;Meu Computador&quot;, clique em &quot;Propriedades&quot;. Clique na aba &quot;Avançado&quot; e no botão &quot;Variáveis de ambiente&quot;. Windows Vista: Clique com o botão direito do mouse em &quot;Meu Computador&quot;. Clique em &quot;Configurações avançadas do sistema&quot;. Aceite a pergunta. Clique na aba &quot;Avançado&quot; e no botão &quot;Variáveis de ambiente&quot;. Adicionar ao Path: ;C:\xampp\php;C:\xampp\htdocs\cake\cake\console Reinicie o computador Ou acesse C:\xampp\htdocs\cake\cake\console> e digite cake
Bake No windows, clique no menu iniciar e no executar digite CMD No  Prompt de comando do Windows,  digite cd .. até chegar no C:\ Após digite:    cd xampp\htdocs\cake Então digite: cake bake
Bake Escolha a letra P Para a pergunta: What is the full path for this app including the app directory name? Digite: C:/xampp/htdocs\livros Para a pergunta:   Look okay? (y/n/q) Digite: y Para a pergunta:   Do you want verbose output? (y/n) Digite: y
http://localhost/livros/
Configuração do Banco de Dados Escolha agora a letra D Para a configuração padrão, vá deixando tudo em branco, exceto database name Name: [default] > Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase) [mysql] > Persistent Connection? (y/n) [n] > Database Host: [localhost] > Port? [n] > User: [root] > Password: > The password you supplied was empty.  Use an empty password? (y/n) [n] > y Database Name: [cake] > livros Table Prefix? [n] > Table encoding? [n] >
Banco de Dados Confirme suas escolhas
Possíveis erros Neste ponto, houve um erro no prompt de comando e o Bake foi fechado. Ao menos a configuração foi feita. O Bake funciona muito melhor no linux. Os usuários do Windows estão sujeitos a este tipo de coisa.
Erro fatal Se der erro, o bake encerra e não pode ser chamado novamente da mesma maneira. Use o comando: cake bake -app C:\xampp\htdocs\livros E substitua o caminho acima pelo caminho completo da sua aplicação
Model cake bake -app C:\xampp\htdocs\livros What would you like to Bake? (D/M/V/C/P/Q) > M Possible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] >  2 Would you like to supply validation criteria for the fields in your model? (y/n) [y] >  y
Validação de Campos Se deseja fornecer critérios de validação para os campos da tabela, escolha y para a pergunta:   Would you like to supply validation criteria for the fields in your model? Para cada um dos campos você deve escolher o tipo de validação. Isso vai mudar de projeto para projeto. Neste nosso projeto escolha: id: 29 ano_public: 8 autores: 29 editores: 29 titulo: 20
Associações É necessário definir associações entre os modelos. Would you like to define model associations (hasMany,  hasOne, belongsTo, etc.)? (y/n) . Existem quatro associações: hasOne: possui um hasMany: possui muitos belongsTo: pertence a hasAndBelongsToMany: tem e pertence a muitos Neste modelo não é preciso associação. Agora você responde se é preciso gerar os arquivos para o PHPUnit. Do you want to bake unit test  files anyway? (y/n) Neste caso, digite n
Modelo para Usuarios What would you like to Bake? (D/M/V/C/P/Q) > M Possible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] >  3 Would you like to supply validation criteria for the fields in your model? (y/n) [y] >  y
Validação dos campos Escolha as opções: id: 29 nome: 20 email: 10 senha: 29 tipo_user: 29 classe_user: 29 Você deseja criar associações? Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) [y] > n SimpleTest is not installed.  Do you want to bake unit test files anyway?(y/n) [y] > n
Modelo para LivroUsuarios Possible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] >  1 Would you like to supply validation criteria for the fields in your model? (y/n) [y] >  y Validação: id: 29 livro_id: 21 usuario_id: 21 data_emprestimo: 8 data_devolucao: 8 Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) [y] >  y
Associações LivroUsuario belongsTo Usuario? (y/n) – y LivroUsuario belongsTo Livro? (y/n) - y
Criação dos Controles --------------------------------------------------------------- Interactive Bake Shell --------------------------------------------------------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [Q]uit What would you like to Bake? (D/M/V/C/P/Q) > c
Faça o mesmo para os 3 itens: Would you like to build your controller interactively? (y/n) [y] > y Would you like to use scaffolding? (y/n) [n] > n Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n) [n] > y Would you like to create the methods for admin routing? (y/n) [n] > n Would you like this controller to use other helpers besides HtmlHelper and FormHelper? (y/n) [n] > n Would you like this controller to use any components? (y/n) [n] > n Would you like to use Sessions? (y/n) [y] > n
Criação das Visões Faça o mesmo para os 3 itens: Would you like to create some scaffolded views (index, add, view, edit) for this controller? NOTE: Before doing so, you'll need to create your controller and model classes (including associated models). (y/n) [n] > y Would you like to create the views for admin routing? (y/n) [y] > n
Movendo os arquivos criados Se o Bake não criou estes arquivos no local certo, você deve movê-los. Acesse: C:\xampp\htdocs\cake\app\models Selecione os três arquivos: Recorte e cole na pasta:  C:\xampp\htdocs\livros\models
Movendo os arquivos criados Acesse:  C:\xampp\htdocs\cake\app\controllers  Selecione os três arquivos: Recorte e cole na pasta:  C:\xampp\htdocs\livros\controllers
Movendo os arquivos criados Acesse:  C:\xampp\htdocs\cake\app\views Selecione as três pastas: Recorte e cole na pasta:  C:\xampp\htdocs\livros\views
Baked Nossa aplicação foi preparada. Acesse: http://localhost/livros/livros Está tudo em inglês, então você vai precisar perder um tempo trocando a linguagem para português.
Caminho Principal Agora vamos redirecionar a aplicação para apontar para a página que você deseja que seja a principal. Routes Adicionar ao arquivo  /app/config/routes.php Linha 35 Router::connect('/', array('controller' => 'livro_usuarios', 'action' => 'index'));
Dados Vamos cadastrar alguns dados...
Customizando Abra, por exemplo, o arquivo:  C:\xampp\htdocs\livros\views\livro_usuarios\index.ctp Vamos corrigir os nomes e deixá-los mais intuitivos para o usuário final Na linha 2, troque: <h2><?php __('LivroUsuarios');?></h2> por <h2><?php __('Empréstimos');?></h2> Obs: lembre-se do problema da acentuação!
Customizando Na linha 6, troque:   'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) por   'format' => __('Página %page% de %pages%, mostrando %current% registros de %count% registros totais, começando no registro %start%, terminando no registro %end%.', true) Para mudar o nome dos campos da tabela:   <th><?php echo $paginator->sort( 'Usuário',  'usuario_id');?></th>
Customizando Na visão de adição de empréstimos aparece o código do aluno e o código do livro. Vamos alterar para aparecer o nome. No mesmo arquivo, troque   <?php echo $livroUsuario['LivroUsuario']['livro_id']; ?> por <?php echo $html->link($livroUsuario['Livro'][' titulo '], array('controller'=> 'livros', 'action'=>'view', $livroUsuario['Livro']['id'])); ?> e <?php echo $livroUsuario['LivroUsuario']['usuario_id']; ?> por  <?php echo $html->link($livroUsuario['Usuario'][' nome '], array('controller'=> 'usuarios', 'action'=>'view', $livroUsuario['Usuario']['id'])); ?> E após, faça o resto das substituições para português em todos os arquivos com extensão  ctp .
Página de Cadastro No arquivos de controle gerados pelo bake, após salvar um novo dado, ele sai da página principal. Para resolver este detalhe, edite o controle. Por exemplo, no arquivo: livros_controller.php Na função function add(), troque a linha: $this->flash(__('Livro saved.', true), array('action'=>'index')); por: $this->Session->setFlash('Seu livro foi salvo.'); $this->redirect(array('action'=>'index'));
Ajax O Cake possui uma série de Helpers para auxiliar no desenvolvimento. Um destes Helpers é o de Ajax. Ele usa as bibliotecas  JavaScript Prototype e script.aculo.us que  devem ser copiadas para o diretório webroot/js/ da aplicação. http://www.prototypejs.org/ http://script.aculo.us/ Coloque os arquivos prototype.js, e os outros 6 arquivos: scriptaculous.js, builder.js, effects.js, dragdrop.js, controls.js and slider.js.
Exemplo Vamos fazer um pequeno exemplo. Uma pequena busca de livros usando Ajax. Primeiro é preciso criar um novo controlador para a aplicação. No diretório controllers vamos criar um novo arquivo, chamado buscas_controller.php
<?php class BuscasController extends AppController { var $name = 'Buscas'; //nome do controlador var $helpers = array('Html','Ajax','Javascript'); //uso dos helpers var $uses = array(&quot;Livro&quot;); //indica qual modelo usar //função da pagina inicial function index() { } //função que sera executada por AJAX para retornar os livros function update () { //pega o parametro enviado pelo formulário $consulta = &quot;%&quot;. $this->params[&quot;form&quot;][&quot;titulo&quot;].&quot;%&quot;; //executa a consulta $this->set('livros',$this->Livro->findAll(&quot;titulo LIKE '$consulta'&quot;)); $this->layout = &quot;ajax&quot;; //queremos usar o layout de ajax e não html } } ?>
Visões O próximo passo é criar as visões. No diretório views deve-se criar um diretório para as views da aplicação. Neste caso chamamos de buscas. Os arquivos correspondentes aos métodos do controlador foram criados: index.ctp update.ctp
index.ctp <?php echo $javascript->link('prototype')?> <?php echo $javascript->link('scriptaculous')?> <?php echo $ajax->form('update','livro',array('model'=>'Livro','update'=>'resultados'));?> <input type=&quot;text&quot; name=&quot;titulo&quot;> <input type=&quot;submit&quot; value=&quot;Pesquisar&quot;> <div id=&quot;resultados&quot;> </div>
update.ctp <?php echo $ajax->div('resultados'); ?> <?php foreach($livros as $livro) { echo $html->link($livro['Livro']['titulo'], array('controller'=> 'livros', 'action'=>'view', $livro['Livro']['id'])).&quot;<br/>&quot;; } ?> <?php echo $ajax->divEnd('resultados'); ?>
Conclusões Desenvolver usando frameworks facilita a padronização e trabalho em equipe. Acelera o ciclo de desenvolvimento. Cake é fácil de aprender. Cake usa uma estrutura de arquivos prática e simples
Obrigada. Laura Lopes [email_address] http://www.lauralopes.com.br

Cake Php

  • 1.
    CakePHP Vantagens xDesvantagens
  • 2.
    Laura Lopes Formadaem Publicidade e Propaganda pela PUC, também estudou Ciência da Computação na UFRGS. Trabalha com web comercialmente desde 1996. Já trabalhou em diversos provedores de Internet e agências web e hoje tem sua própria empresa, onde trabalha com treinamento e consultoria em sites e sistemas. É instrutora na TargetTrust desde novembro de 2006. E-mail: lauralopes@targettrust.com.br.
  • 3.
    Tópicos O queé o CakePHP Conceitos básicos Vantagens Desvantagens Requisitos Instalação Configuração Aplicação de exemplo
  • 4.
    O que éo CakePHP
  • 5.
    O que éo CakePHP CakePHP é um framework open source de desenvolvimento para PHP. Possibilita aos programadores PHP de todos os níveis desenvolverem aplicações robustas rapidamente. Usando convenções ao invés de configurações, reduz o custo do desenvolvimento e ajuda os desenvolvedores a escreverem menos código.
  • 6.
    O que éo CakePHP CakePHP é um framework que usa padrões de desenvolvimento conhecidos como ActiveRecord e MVC . A idéia principal é ser um framework estruturado que permita a usuários PHP de todos os níveis desenvolver aplicações web robustas sem perda da flexibilidade.
  • 7.
  • 8.
    Design Patterns Ospadrões de projeto são muito úteis para resolver problemas de modelagem de projetos se usados de forma adequada. Padrões de projetos são soluções para problemas que alguém um dia teve e resolveu aplicando um modelo que foi documentado e que você pode adaptar integralmente ou de acordo com necessidade de sua solução.
  • 9.
    Design Patterns Opadrão de modelo MVC, que é o mais utilizado em arquituras web, tem por objetivo básico separar a lógica de negócio da apresentação. O grande desafio das equipes de desenvolvimento de aplicações é cada vez mais produzir aplicativos seguros, eficientes, de fácil manutenção, reutilizáveis e em prazos cada vez menores.
  • 10.
    O Modelo MVCModel View Controller O modelo de três camadas fisícas (3-tier) divide um aplicativo de modo que a lógica de negócio resida no meio das três camadas físicas. Isto é chamado de camada física intermediária ou camada física de negócios. A maior parte do código escrito reside na camada de apresentação e de negócio.
  • 11.
    MVC Modelo :gerencia os dados da aplicação Visão : gerencia a saída gráfica e textual da parte da aplicação visível ao usuário Controle : interpreta as entradas de mouse e teclado do usuário, comandando a Visão e o Modelo para se alterarem de forma apropriada.
  • 12.
  • 13.
  • 14.
    Vantagens Independência entreos componentes; eficiência; escalabilidade; reutilização; licença flexível (MIT); compatibilidade com PHP4 e PHP5; geração de CRUD para interação com BD; arquitetura MVC; validações; templates; ferramentas que auxiliam gerar Javascript, AJAX, forms HTML, etc; comunidade ativa; funciona em qualquer subdiretório web, com pouca configuração do Apache.
  • 15.
  • 16.
    Desvantagens Requer umaquantidade maior de tempo para analisar e modelar o sistema; Requer pessoal especializado; Não é aconselhável para pequenas aplicações.
  • 17.
  • 18.
    Requisitos Servidor HTTP.Apache com mod_rewrite. PHP 4.3.2 ou superior. Tecnicamente um banco de dados não é obrigatório, mas nós imaginamos que a maioria das aplicações irão utilizar um. CakePHP suporta uma variedade de banco de dados: MySQL (4 ou superior) − Oracle PostgreSQL − SQLite Firebird DB2 − ODBC Microsoft SQL Server − ADOdb
  • 19.
  • 20.
    Preparando a instalaçãoCakePHP é rápido e fácil de instalar. Vamos focar na configuração com Apache (porque ele é o mais comum). A preparação para a instalação consiste dos seguintes passos: Baixar uma cópia do CakePHP Configurar seu servidor web para manipular php, se necessário Checar permissão de arquivos
  • 21.
    Apache e PHPExistem maneiras simples de instalar o apache e o PHP no seu computador. Eu uso o XAMPP http://www.apachefriends.org/en/xampp.html Mas existem outros aplicativos que facilitam a instalação no Windows: Wamp http://www.wampserver.com/ EasyPHP http://sourceforge.net/projects/quickeasyphp/
  • 22.
    Baixando o CakePHPHá duas maneiras de pegar uma cópia do CakePHP, Primeiro: você pode baixar o arquivo (zip/tar.gz/tar.bz2) ou você pode baixar o código do repositório SVN. Para pegar a cópia estável, visite o site http://www.cakephp.org . O site CakeForge contém links para muitos outros projetos CakePHP, incluindo plugins e aplicações para CakePHP. As versões de CakePHP estão disponíveis em http://cakeforge.org/projects/cakephp .
  • 23.
    Permissões O CakePHPusa o diretório /app/tmp para diversas operações. Exemplos: descritivos dos modelos fazer cache de visões e informações das sessões Assim, tenha certeza que o diretório /app/tmp na instalação do seu cake permite escrita pelo usuário do servidor de web.
  • 24.
    Instalação No Windows:Descompacte o arquivo em uma pasta cake na raiz do seu servidor web. No Ubuntu: tar xfvj cake_1.1.10.3825.tar.bz2 mv mv cake_1.1.10.3825 /var/www/cake Testar no navegador no endereço: http://localhost/cake
  • 25.
  • 26.
  • 27.
    Apache and mod_rewrite(and .htaccess) Caso o arquivo de estilos não tenha aparecido, você precisa configurar o arquivo httpd.conf do Apache. Localize <Directory /> e faça as alterações: <Directory /> Options FollowSymLinks AllowOverride All # Order deny,allow # Deny from all </Directory>
  • 28.
    Configuração Apache Énecessário duas configurações: o mod_rewrite e o AllowOverride precisam estar ativos. Alterar o httpd.conf (apache2.conf no Ubuntu) e descomentar ou adicionar as linhas : LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c Adicionar a linha abaixo no DocumentRoot e reiniciar o Apache: AllowOverride all
  • 29.
    mod_rewrite Tenha certezade que está carregando o mod_rewrite corretamente. Você deve encontrar algo como: LoadModule rewrite_module libexec/apache2/mod_rewrite.so Em muitos sistemas esta linha estará comentada (com o # na frente). Tire o # e salve o arquivo. Reinicie o servidor Apache.
  • 30.
    Ajuste do códigode segurança Trocar o valor de 'Security.salt' no arquivo app/config/core.php para um valor específico da sua aplicação Não importa o que você vai colocar, desde que seja único Configure::write('Security.salt', 'Cf0*&IRUa2GVhz4DRoFmJ9Yq9vr3%');
  • 31.
    Alterações de línguaArquivo core.php (\app\config\core.php) Configure::write('App.encoding', 'ISO-8859-1');
  • 32.
    Configuração do bancode dados Altere o arquivo: /app/config/database.php.default para database.php. Substitua os valores pelos dados do seu banco de dados: var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'livros', 'prefix' => '', );
  • 33.
  • 34.
    Favicon Arquivo favicon.icona pasta: \app\webroot\favicon.ico Antes: Depois:
  • 35.
    Diretórios /app -aplicação /config – arquivos de configuração, DB, etc /controllers – controladores da aplicação /index.php – página inicial da aplicação /models – modelos da aplicação /plugins /tmp – usado para chache e logs /vendors – bibliotecas de terceiros /views – visões da aplicação /elements – elementos, pedaços da visão /errors – páginas de erros customizadas /helpers – ajudantes para gerar código /layots – arquivos de layout /pages – visões estáticas /scaffolds /webroot – DocumentRoot para aplicação /css – arquivos css /files – arquivos comuns /img – imagens /js – Javascripts /cake – código fonte do cake /vendors – aplicações de terceiros
  • 36.
  • 37.
    Desenvolvendo a aplicaçãoUm professor gostaria de uma aplicação web simples para manter-se informado sobre os livros que empresta a seus alunos. No sistema ele pode visualizar e alterar os alunos cadastrados e também os empréstimos.
  • 38.
  • 39.
    Padronização e nãoconfiguração O CakePHP segue algumas regras de padronização para a base de dados: Todas as tabelas devem estar no plural A chave primária para todas as tabelas deve ser o campo “id” Para utilizar chave estrangeira, deve possuir nome da tabela no singular acrescido do campo id. Ex: “usuario_id”. O relacionamento “n – n”, deve ser organizado em ordem alfabética, e o primeiro nome no singular acrescido de um “_” nome segunda tabela plural. Ex: livro_usuarios; Se você quiser que ele atualize automagicamente as datas de criação e modificação de um registro, basta criar a tabela com as colunas created (para data de criação) e modified (para data de modificação)
  • 40.
  • 41.
    Criando o bancoApós fazer a modelagem, acesse o banco e carregue o SQL de criação do banco. Considerando o XAMPP instalado, acesse: http://localhost/phpmyadmin/
  • 42.
    Configurações Faça asconfigurações necessárias.
  • 43.
    Iniciando a aplicaçãoO cake possui uma excelente ferramenta para geração da aplicação e de várias partes de código. A ferramenta chama-se Bake .
  • 44.
    Adicionando o Bakeao path do Windows Considerando o uso do XAMPP Windows XP: Clique com o botão direito do mouse em &quot;Meu Computador&quot;, clique em &quot;Propriedades&quot;. Clique na aba &quot;Avançado&quot; e no botão &quot;Variáveis de ambiente&quot;. Windows Vista: Clique com o botão direito do mouse em &quot;Meu Computador&quot;. Clique em &quot;Configurações avançadas do sistema&quot;. Aceite a pergunta. Clique na aba &quot;Avançado&quot; e no botão &quot;Variáveis de ambiente&quot;. Adicionar ao Path: ;C:\xampp\php;C:\xampp\htdocs\cake\cake\console Reinicie o computador Ou acesse C:\xampp\htdocs\cake\cake\console> e digite cake
  • 45.
    Bake No windows,clique no menu iniciar e no executar digite CMD No Prompt de comando do Windows, digite cd .. até chegar no C:\ Após digite: cd xampp\htdocs\cake Então digite: cake bake
  • 46.
    Bake Escolha aletra P Para a pergunta: What is the full path for this app including the app directory name? Digite: C:/xampp/htdocs\livros Para a pergunta: Look okay? (y/n/q) Digite: y Para a pergunta: Do you want verbose output? (y/n) Digite: y
  • 47.
  • 48.
    Configuração do Bancode Dados Escolha agora a letra D Para a configuração padrão, vá deixando tudo em branco, exceto database name Name: [default] > Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase) [mysql] > Persistent Connection? (y/n) [n] > Database Host: [localhost] > Port? [n] > User: [root] > Password: > The password you supplied was empty. Use an empty password? (y/n) [n] > y Database Name: [cake] > livros Table Prefix? [n] > Table encoding? [n] >
  • 49.
    Banco de DadosConfirme suas escolhas
  • 50.
    Possíveis erros Nesteponto, houve um erro no prompt de comando e o Bake foi fechado. Ao menos a configuração foi feita. O Bake funciona muito melhor no linux. Os usuários do Windows estão sujeitos a este tipo de coisa.
  • 51.
    Erro fatal Seder erro, o bake encerra e não pode ser chamado novamente da mesma maneira. Use o comando: cake bake -app C:\xampp\htdocs\livros E substitua o caminho acima pelo caminho completo da sua aplicação
  • 52.
    Model cake bake-app C:\xampp\htdocs\livros What would you like to Bake? (D/M/V/C/P/Q) > M Possible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] > 2 Would you like to supply validation criteria for the fields in your model? (y/n) [y] > y
  • 53.
    Validação de CamposSe deseja fornecer critérios de validação para os campos da tabela, escolha y para a pergunta: Would you like to supply validation criteria for the fields in your model? Para cada um dos campos você deve escolher o tipo de validação. Isso vai mudar de projeto para projeto. Neste nosso projeto escolha: id: 29 ano_public: 8 autores: 29 editores: 29 titulo: 20
  • 54.
    Associações É necessáriodefinir associações entre os modelos. Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) . Existem quatro associações: hasOne: possui um hasMany: possui muitos belongsTo: pertence a hasAndBelongsToMany: tem e pertence a muitos Neste modelo não é preciso associação. Agora você responde se é preciso gerar os arquivos para o PHPUnit. Do you want to bake unit test files anyway? (y/n) Neste caso, digite n
  • 55.
    Modelo para UsuariosWhat would you like to Bake? (D/M/V/C/P/Q) > M Possible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] > 3 Would you like to supply validation criteria for the fields in your model? (y/n) [y] > y
  • 56.
    Validação dos camposEscolha as opções: id: 29 nome: 20 email: 10 senha: 29 tipo_user: 29 classe_user: 29 Você deseja criar associações? Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) [y] > n SimpleTest is not installed. Do you want to bake unit test files anyway?(y/n) [y] > n
  • 57.
    Modelo para LivroUsuariosPossible Models based on your current database: 1. LivroUsuario 2. Livro 3. Usuario Enter a number from the list above, type in the name of another model, or 'q' to exit [q] > 1 Would you like to supply validation criteria for the fields in your model? (y/n) [y] > y Validação: id: 29 livro_id: 21 usuario_id: 21 data_emprestimo: 8 data_devolucao: 8 Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) [y] > y
  • 58.
    Associações LivroUsuario belongsToUsuario? (y/n) – y LivroUsuario belongsTo Livro? (y/n) - y
  • 59.
    Criação dos Controles--------------------------------------------------------------- Interactive Bake Shell --------------------------------------------------------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [Q]uit What would you like to Bake? (D/M/V/C/P/Q) > c
  • 60.
    Faça o mesmopara os 3 itens: Would you like to build your controller interactively? (y/n) [y] > y Would you like to use scaffolding? (y/n) [n] > n Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n) [n] > y Would you like to create the methods for admin routing? (y/n) [n] > n Would you like this controller to use other helpers besides HtmlHelper and FormHelper? (y/n) [n] > n Would you like this controller to use any components? (y/n) [n] > n Would you like to use Sessions? (y/n) [y] > n
  • 61.
    Criação das VisõesFaça o mesmo para os 3 itens: Would you like to create some scaffolded views (index, add, view, edit) for this controller? NOTE: Before doing so, you'll need to create your controller and model classes (including associated models). (y/n) [n] > y Would you like to create the views for admin routing? (y/n) [y] > n
  • 62.
    Movendo os arquivoscriados Se o Bake não criou estes arquivos no local certo, você deve movê-los. Acesse: C:\xampp\htdocs\cake\app\models Selecione os três arquivos: Recorte e cole na pasta: C:\xampp\htdocs\livros\models
  • 63.
    Movendo os arquivoscriados Acesse: C:\xampp\htdocs\cake\app\controllers Selecione os três arquivos: Recorte e cole na pasta: C:\xampp\htdocs\livros\controllers
  • 64.
    Movendo os arquivoscriados Acesse: C:\xampp\htdocs\cake\app\views Selecione as três pastas: Recorte e cole na pasta: C:\xampp\htdocs\livros\views
  • 65.
    Baked Nossa aplicaçãofoi preparada. Acesse: http://localhost/livros/livros Está tudo em inglês, então você vai precisar perder um tempo trocando a linguagem para português.
  • 66.
    Caminho Principal Agoravamos redirecionar a aplicação para apontar para a página que você deseja que seja a principal. Routes Adicionar ao arquivo /app/config/routes.php Linha 35 Router::connect('/', array('controller' => 'livro_usuarios', 'action' => 'index'));
  • 67.
    Dados Vamos cadastraralguns dados...
  • 68.
    Customizando Abra, porexemplo, o arquivo: C:\xampp\htdocs\livros\views\livro_usuarios\index.ctp Vamos corrigir os nomes e deixá-los mais intuitivos para o usuário final Na linha 2, troque: <h2><?php __('LivroUsuarios');?></h2> por <h2><?php __('Empréstimos');?></h2> Obs: lembre-se do problema da acentuação!
  • 69.
    Customizando Na linha6, troque: 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) por 'format' => __('Página %page% de %pages%, mostrando %current% registros de %count% registros totais, começando no registro %start%, terminando no registro %end%.', true) Para mudar o nome dos campos da tabela: <th><?php echo $paginator->sort( 'Usuário', 'usuario_id');?></th>
  • 70.
    Customizando Na visãode adição de empréstimos aparece o código do aluno e o código do livro. Vamos alterar para aparecer o nome. No mesmo arquivo, troque <?php echo $livroUsuario['LivroUsuario']['livro_id']; ?> por <?php echo $html->link($livroUsuario['Livro'][' titulo '], array('controller'=> 'livros', 'action'=>'view', $livroUsuario['Livro']['id'])); ?> e <?php echo $livroUsuario['LivroUsuario']['usuario_id']; ?> por <?php echo $html->link($livroUsuario['Usuario'][' nome '], array('controller'=> 'usuarios', 'action'=>'view', $livroUsuario['Usuario']['id'])); ?> E após, faça o resto das substituições para português em todos os arquivos com extensão ctp .
  • 71.
    Página de CadastroNo arquivos de controle gerados pelo bake, após salvar um novo dado, ele sai da página principal. Para resolver este detalhe, edite o controle. Por exemplo, no arquivo: livros_controller.php Na função function add(), troque a linha: $this->flash(__('Livro saved.', true), array('action'=>'index')); por: $this->Session->setFlash('Seu livro foi salvo.'); $this->redirect(array('action'=>'index'));
  • 72.
    Ajax O Cakepossui uma série de Helpers para auxiliar no desenvolvimento. Um destes Helpers é o de Ajax. Ele usa as bibliotecas JavaScript Prototype e script.aculo.us que devem ser copiadas para o diretório webroot/js/ da aplicação. http://www.prototypejs.org/ http://script.aculo.us/ Coloque os arquivos prototype.js, e os outros 6 arquivos: scriptaculous.js, builder.js, effects.js, dragdrop.js, controls.js and slider.js.
  • 73.
    Exemplo Vamos fazerum pequeno exemplo. Uma pequena busca de livros usando Ajax. Primeiro é preciso criar um novo controlador para a aplicação. No diretório controllers vamos criar um novo arquivo, chamado buscas_controller.php
  • 74.
    <?php class BuscasControllerextends AppController { var $name = 'Buscas'; //nome do controlador var $helpers = array('Html','Ajax','Javascript'); //uso dos helpers var $uses = array(&quot;Livro&quot;); //indica qual modelo usar //função da pagina inicial function index() { } //função que sera executada por AJAX para retornar os livros function update () { //pega o parametro enviado pelo formulário $consulta = &quot;%&quot;. $this->params[&quot;form&quot;][&quot;titulo&quot;].&quot;%&quot;; //executa a consulta $this->set('livros',$this->Livro->findAll(&quot;titulo LIKE '$consulta'&quot;)); $this->layout = &quot;ajax&quot;; //queremos usar o layout de ajax e não html } } ?>
  • 75.
    Visões O próximopasso é criar as visões. No diretório views deve-se criar um diretório para as views da aplicação. Neste caso chamamos de buscas. Os arquivos correspondentes aos métodos do controlador foram criados: index.ctp update.ctp
  • 76.
    index.ctp <?php echo$javascript->link('prototype')?> <?php echo $javascript->link('scriptaculous')?> <?php echo $ajax->form('update','livro',array('model'=>'Livro','update'=>'resultados'));?> <input type=&quot;text&quot; name=&quot;titulo&quot;> <input type=&quot;submit&quot; value=&quot;Pesquisar&quot;> <div id=&quot;resultados&quot;> </div>
  • 77.
    update.ctp <?php echo$ajax->div('resultados'); ?> <?php foreach($livros as $livro) { echo $html->link($livro['Livro']['titulo'], array('controller'=> 'livros', 'action'=>'view', $livro['Livro']['id'])).&quot;<br/>&quot;; } ?> <?php echo $ajax->divEnd('resultados'); ?>
  • 78.
    Conclusões Desenvolver usandoframeworks facilita a padronização e trabalho em equipe. Acelera o ciclo de desenvolvimento. Cake é fácil de aprender. Cake usa uma estrutura de arquivos prática e simples
  • 79.
    Obrigada. Laura Lopes[email_address] http://www.lauralopes.com.br