O documento descreve o framework CakePHP, incluindo suas vantagens, requisitos, instalação e configuração. O autor também apresenta um exemplo de aplicação para empréstimos de livros entre professores e alunos utilizando o CakePHP.
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
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.
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.
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.
Desvantagens Requer umaquantidade maior de tempo para analisar e modelar o sistema; Requer pessoal especializado; Não é aconselhável para pequenas aplicações.
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
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
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' => '', );
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.
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)
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/
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 "Meu Computador", clique em "Propriedades". Clique na aba "Avançado" e no botão "Variáveis de ambiente". Windows Vista: Clique com o botão direito do mouse em "Meu Computador". Clique em "Configurações avançadas do sistema". Aceite a pergunta. Clique na aba "Avançado" e no botão "Variáveis de ambiente". 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
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] >
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
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'));
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("Livro"); //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 = "%". $this->params["form"]["titulo"]."%"; //executa a consulta $this->set('livros',$this->Livro->findAll("titulo LIKE '$consulta'")); $this->layout = "ajax"; //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
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