Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utilizando o framework CakePHP
Upcoming SlideShare
Loading in...5
×
 

Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utilizando o framework CakePHP

on

  • 13,679 views

Palestra de Elton Luís sobre esse ótimo framework PHP

Palestra de Elton Luís sobre esse ótimo framework PHP

Statistics

Views

Total Views
13,679
Views on SlideShare
13,344
Embed Views
335

Actions

Likes
3
Downloads
383
Comments
0

4 Embeds 335

http://eduardobreno.blogspot.com 296
http://www.slideshare.net 37
http://64.233.169.104 1
http://74.125.45.132 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utilizando o framework CakePHP Presentation Transcript

  • 1. Desenvolva rapidamente utilizando o framework CakePHP Elton Luís Minetto
  • 2. Agenda Ambiente Web • PHP • Problemas • Frameworks • CakePHP • Demonstração •
  • 3. Ambiente Web É o ambiente formado por algumas tecnologias: • Servidor Web • Protocolo HTTP e HTTPS • Navegadores • HTML, PHP, JSP, CSS, AJAX • Web sites e sistemas
  • 4. PHP Livre • Fácil de usar • Grande documentação • Grande biblioteca de funções • Orientação a Objeto •
  • 5. Problemas Ambiente Web/PHP • Repetição de tarefas • Dificuldade de debug • Várias formas de fazer a mesma coisa • Existem poucos padrões e os que existem não são cumpridos (W3C x Microsoft) • Os design patterns foram criados para aplicações cliente-servidor, somente agora estão sendo portados para web • Clientes querem alterar tudo muito rápido • Desenvolvimento lento • Pouco reaproveitamento de código • Não existem ferramentas RAD como Delphi • Dificuldade de fazer relatórios • Navegadores não renderizam corretamente algumas coisas • Novas tecnologias surgindo a todo minuto • Mistura de layout e lógica
  • 6. Problemas Ambiente Web/PHP
  • 7. Frameworks É uma “base” de onde pode-se desenvolver algo maior ou mais específico. É uma coleção de códigos, classes, funções, técnicas e metodologias que facilitam o desenvolvimento de novos softwares. Vantagens Todos programam parecido graças a ● padronizações. Fácil manutenção Automatiza tarefas repetitivas. DRY ● Separação de layout e lógica. no more ● spaguetti! Reaproveitamento de códigos ●
  • 8. Padrões Os frameworks são baseados em uma série de padrões de desenvolvimento já consolidadas: MVC MVC é um acrônimo para Model, View, Controller (Modelo, Visão e Controlador). A idéia é separar todo o desenvolvimento de uma aplicação nestas três partes, ou camadas: • Model – gerencia o comportamento dos dados da aplicação. • View – gerencia a saída gráfica e textual da parte da aplicação visível ao usuário • Controller – interpreta as entradas de mouse e teclado do usuário, comandando a Visão e o Modelo para se alterarem de forma apropriada.
  • 9. Padrões ActiveRecord Este padrão de design facilita a manipulação de dados contidos em uma base dados por aplicações desenvolvidas com o paradigma orientados a objetos. Uma tabela de uma base de dados é vista na forma de uma classe, enquanto que cada linha da tabela é considerada um objeto desta classe. Quando um objeto é criado, alterado ou excluído esta ação é automaticamente refletida na base de dados. Desta forma não é necessário que o desenvolvedor conheça uma linguagem de manipulação de dados como SQL, além de manter toda a aplicação desenvolvida no paradigma orientado a objetos.
  • 10. CakePHP Cake é um framework para PHP 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 rubustas sem perda da flexibilidade.
  • 11. CakePHP - Vantagens • 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.
  • 12. Conceitos - Diretórios /ap p - a pl ica çã o /c on fi g – a rqu ivo s de co nfi gu raç ão , DB, e tc /c on tr oll er s – co nt rol ad ore s da ap li caç ão /i nd ex .ph p – p ági na in ic ial d a a pl ic açã o /m od el s – m ode los d a a pl ica çã o /p lu gi ns /t mp – us ad o p ara c ach e e l og s /v en do rs – bib lio te cas d e t er cei ro s /v ie ws – vi sõe s d a apl ic açã o /el eme nt s – e lem ent os , p ed aço s da vi sã o /er ror s – p ág ina s d e err os cu st om iza da s /he lpe rs – aj uda nte s par a ger ar c ódi go /la you ts – ar qui vos d e l ay out /pa ges – vi sõ es est át ica s /w eb ro ot – Doc ume nt Roo t par a apl ic aç ão /cs s – a rqu iv os css /fi les – ar qu ivo s c om uns /im g – i mag en s /js – Ja vas cr ipt s /ca ke – có dig o fon te do c ake
  • 13. Requisitos Servidor web com as funcionalidades: sessions, mod_rewrite (não obrigatório mas aconselhável) PHP 4.3.2 ou superior Uma base de dados. Atualmente é suportado MySQL, PostgreSQL, SQLite,ODBC e AdoDB. Futuramente Oracle (CakePHP 1.2)
  • 14. Instalação Download do arquivo em http://cakephp.org/downloads Descompactar e copiar para o diretório root do servidor Web. No Ubuntu: tar x fvj c ake _1 .1. 15. 51 44 .ta r. bz2 mv c ake _1 .1. 15 .51 44 /v ar /ww w/ cak e Testar no navegador no endereço: http://localhost/cake
  • 15. 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 : Loa dM odu le re wr ite _mo du le mo du les /m od_ re wri te .so Add Mo dul e mod _r ewr ite .c Adicionar a linha abaixo no DocumentRoot e reiniciar o Apache: All ow Ove rr ide a ll
  • 16. talk is cheap... ...show me the code!
  • 17. Desenvolvendo A aplicação Foi solicitado a criação de um site para agregar informações de diversas imobiliárias. Os clientes podem acessar e visualizar imóveis a venda e se cadastrar como interessados. Deve haver uma interface de administração para controle das informações cadastradas
  • 18. Desenvolvendo O Cake 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: imovel_id. O relacionamento “n-n”, deve ser organizado em ● ordem alfabética e os nomes devem estar no plural. Exemplo: livros_usuarios Modelos são no singular e controladores no plural ●
  • 19. Modelagem
  • 20. Usando o CakePHP 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.
  • 21. Usando o CakePHP Criando um projeto: cd / var /w ww/ ca ke/ ph p cak e/ scr ip ts/ bak e. php - pr oje ct we bi mov ei s Após responder y para as perguntas, toda a estrutura de diretórios é criada. Depois de criado o projeto é necessário criar a aplicação.
  • 22. Usando o CakePHP Criando uma aplicação: ph p cak e/ scr ip ts/ bak e. php - ap p w eb imo ve is What da ta bas e driv er wo uld yo u li ke to use? (mys ql /my sq li/ mss ql /sq li te/ po st gre s/ odb c) – qual data ba se. N est e c as o m ys ql Wha t is th e ho stn am e fo r th e data ba se ser ve r? - loc al ho st Wha t is th e dat aba se us er nam e? - im ob ili ar ias Wha t is th e dat aba se pa ss wor d? - im ob ili ar ias Wha t is th e nam e of the da ta bas e yo u wil l be usi ng ? - qu al é a base de dado usa da . Ne ste exe mp lo imo bil iar ia s. As ta bel as dev em ser pre vi am ent e cri ada s.
  • 23. Usando o CakePHP En te r a tabl e pre fi x? - caso as ta be las ten ha m al gum p ref ix o no s eu n ome . Nes te ca so – n Lo ok ok ay ? (y/ n) – co nf ir mar com y ca so tudo es tej a cor re to Neste momento foram criadas as configurações de conexão com a base de dados da aplicação. Estas configurações foram salvas em /v ar /ww w/ cak e/ web imo ve is/ co nf ig/ da tab as e.p hp e podem ser alteradas posteriormente.
  • 24. DICA Para gerar os modelos o bake irá trabalhar com os nomes das tabelas no singular. Como o CakePHP foi desenvolvido em inglês existem alguns problemas que ocorrem nessa transformação. Por exemplo, imobiliarias torna-se imobiliarium. Para resolver este problema é necessário alterar o arquivo we bi mov ei s/c on fig /in fl ect io ns .ph p e alterar a seguinte linha: $s in gul ar Rul es = arr ay ('/ ([ ti ])a $/ i' => ' 1a ');
  • 25. Usando o CakePHP Executando novamente o bake é solicitado a opção de gerar o Modelo, a Visão ou o Controle da aplicação. Gerando o Modelo: O bake conecta na base de dados e encontra as tabelas existentes. Você pode escolher para qual das tabelas irá criar o modelo. Inicialmente vamos escolher a tabela Imobiliarias digitando seu número da lista mostrada. Wo ul d you like to su ppl y va li dat io n cr ite ri a for th e fiel ds in you r mod el? (y /n )- se des eja fo rne ce r cri tér ios de val ida çã o par a os cam po s da tab el a. Nes te caso y. É apr es en tad o cad a um do s ca mp os e, de ac or do com se u ti po na tab el a é apr es ent ad o alg uma s val id açõ es . Por exem pl o o ca mpo id pod e ser va li da do para VA LID _N OT_ EM PT Y ou V AL ID_ NU MBE R.
  • 26. Usando o CakePHP Wo ul d you lik e to def in e mo de l as soc ia ti ons (h asM an y, ha sOn e, be lon gs To, etc. )? (y /n ) – se é ne ces sá rio defi nir ass oci aç ões ent re os mo del os . E xi st em q ua tr o a ss oci aç ões : hasOne: possui um hasMany: possui muitos belongsTo: pertence a hasAndBelongsToMany: tem e pertence a muitos Escolhendo y o bake vai identificar as associações e solicitar confirmação para cada uma delas:
  • 27. Usando o CakePHP Im ob ili ar ia ha sOn e I mo ve l? (y /n) [y ] > n Im ob ili ar ia ha sOn e U su ar io? ( y/n ) [y ] > n Im ob ili ar ia ha sMa ny Im ov el? ( y/n ) [y ] > y Im ob ili ar ia ha sMa ny Us ua rio ? (y/ n) [y ] > y Ca ke tes t sui te not in sta ll ed. Do you want to ba ke un it te st fil es a nyw ay ? ( y/ n) [y ] > n – ge ra r a s c la ss es de te st e. Ne ste c aso N O ar qui vo mo de ls/ imo bi li ari a. php é ge ra do
  • 28. Usando o CakePHP Após criar todos os modelos é preciso criar os Controle. Executando novamente o comando: ph p cak e/ scr ip ts/ bak e. ph p - ap p we bim ov eis Po ss ibl e Con tro lle rs ba sed on yo ur cu rr ent da tab as e – e sc olhe r o Imo bi lia ri as Wo ul d yo u li ke bake to bui ld yo ur con tr ol ler in ter ac ti vel y? - y Wo ul d you lik e to us e sc af fo ldi ng ? (y /n ) - se qu ere mo s cri ar as te la vi rt uai s de CR UD . N Wo ul d you lik e to in cl ude som e ba si c cl ass me tho ds (i nd ex( ), add () , view () , edi t( ))? (y /n) - se qu erem os cri ar as tel as de CRUD ex pli ci ta men te . Ne st e cas o Y
  • 29. Usando o CakePHP Wo ul d you li ke to cre at e the met ho ds for ad mi n ro uti ng ? (y/ n) – se qu er emo s cr iar uma in ter fa ce di fe rent e pa ra a adi mi str aç ão . Y Wo ul d you li ke thi s con tro ll er to us e ot her mo del s besi de s 'Im ob ili ar ia '? (y/n ) – se é ne ces sá ri o usar mai s de um mod el o. Ne st e cas o n Wo ul d you li ke thi s con tro ll er to us e ot her he lpe rs be sid es Htm lH elp er and Form He lp er? (y /n) – se são ne ce ssá ri os ou tr os aj ud an tes al ém do ger ad or de Html e For ms. Va mos ut ili za r o he lp er de Ja vas cr ipt , en tão di git am os y e depo is J ava sc rip t
  • 30. Usando o CakePHP Wo uld yo u li ke th is co ntr ol ler to us e any com po ne nts ? (y /n) – se quer em os uti liz ar com po ne nte s adici on ai s. Exe mpl o: ger ad or de PDF , Pa gin aç ão, et c Wo uld you like to us e Se ss ion s? (y/ n) – se que re mo s us ar Ses sõ es. Se mp re é imp or tan te par a gu ar dar mo s inf or maç õe s, pri nci pa lme nt e de val id aç ão de us uár io s. Ca ke tes t suit e no t ins ta lle d. Do you wa nt to bak e uni t tes t fi le s any way ? (y /n) - se que re mo s c ri ar as cl ass es de t est e. N O ar qui vo cont rol le rs/ im obi li ari as _c ont ro lle r.p hp é g er ad o
  • 31. Usando o CakePHP E, finalmente, para gerar a Visão, executar novamente o bake, escolher a opção V e o número correspondente a Imobiliarias. Wo ul d you li ke to cre at e som e sca ffo ld ed vi ew s (i nde x, add , vie w, ed it ) fo r th is con tr oll er ? - ele vai cri ar a vis ão par a os mé to dos bá sic os de ins erç ão, excl us ão, etc . Res pon de r y Wo ul d you like to cre at e th e vi ew s fo r ad min ro uti ng ? (y /n ) – co mo esc ol hem os no co ntr ol ad or qu e que re mos int erf ac e de ad min is tr açã o deve mo s esc ol her Y ne st a opç ão Um dir et óri o é cr ia do em vi ew s/i mo bil ia ri as/ com di ver so s arq uiv os HT ML , um para cad a açã o do co ntr ol ad or. Exem plo : in dex .t ht ml, ad min _e di t.t ht ml, et c.
  • 32. Customizando Os passos anteriores devem ser repetidos para todas as tabelas do banco de dados. Após isto, está criado um “esqueleto” da aplicação. Agora podemos customizar os códigos gerados para criarmos a aplicação final.
  • 33. Layout Nosso designer nos mandou o layout do site. Agora precisamos colocar este visual nas aplicações geradas pelo CakePHP.
  • 34. Layout O layout principal das aplicações encontra-se no arquivo views/layouts/default.thtml. Mudando este arquivo podemos transformar automaticamente todas as aplicações geradas. Os arquivos .css devem ser salvos no diretório webroot/css/ Os arquivos .js (Javascript) devem ser salvos no diretório webroot/js/
  • 35. Página inicial Quando acessamos o link http://localhost/cake/webimoveis/ iremos redirecionar para a página que lista as imobiliárias. Para isso deve-se alterar o arquivo views/pages/home.thtml Seu novo conteúdo é: <? ph p he ad er( 'l oca ti on: imo bi li ari as '); ?>
  • 36. Imobiliárias O controlador imobiliarias_controller.php gerado pelo bake possui diversos métodos. Vamos alterá-lo e deixar somente o método index() e os métodos admin. O método index() é o responsável por mostrar todas as imobiliárias cadastradas e seus imóveis. O código deste método é mostrado no próximo slide
  • 37. Imobiliárias function index($id=null) { //busca as imobiliarias $thi s->Imo biliar ia->re cursiv e = 0; //não recur sivo. busca só a im obiliá ria $thi s->set ('imob iliari as',$t his->I mobili aria-> findAl l()); //bu sca a imobil iaria atual if($ id) { //se j á foi seleci onado uma, d eve bu scar t odos os dado s $this->Imobiliaria->recursive = 2; $this->set('atual', $this->Imobiliaria- >findAllById($id)); } }
  • 38. Imobiliárias Além disso é preciso alterar o arquivo views/imobiliarias/index.thtml para mostrar os dados vindos da tabela. Não é possível mostrar todo o arquivo no slide mas está disponível junto com esta apresentação. Exemplo de trecho: <h3><?php echo $atual['0']['Imobiliaria']['nome']?></h3> <?php echo $atual['0']['Imobiliaria']['endereco']?><br> <b>Telefone: <?php echo $atual['0']['Imobiliaria']['telefone']?></b><br>
  • 39. Imóveis Processo semelhante vamos realizar com o cadastro de imóveis. Primeiro vamos excluir os métodos não necessários do controlador (add, edit, delete), deixando somente o index() e os métodos de administração. A única alteração necessária no método index() é: $t hi s-> Im ove l- >re cur si ve = 1; para buscar as fotos do imóvel. No arquivo de visão do método index (index.thtml) devemos alterar para mostrar os dados do imóvel e o formulário de cadastro de interessados, conforme mostra a imagem
  • 40. Imóveis
  • 41. Interessados Quando o visitante preencher o formulário de interessados esta informação será salva na tabela. Para isso iremos utilizar os códigos gerados pelo bake. Quem fará o salvamento na tabela é o interessados_controller.php, no método add(). A única alteração necessária é substituir no método add() a linha $this->redirect('/interessados/index'); por $this->redirect('/imobiliarias/index'); Assim, quando salvar os dados o usuário será redirecionado para a página inicial da aplicação.
  • 42. Controle de acesso Quando o usuário clicar na oção Admin na página inicial será direcionado a um formulário para fazer o login na aplicação. Para realizar esta tarefa é preciso os seguintes passos: 1) Criar o controlador em controllers/login_controller.php. Neste arquivo deve-se criar os métodos index(para mostrar o formulário), valida (para fazer a validação), logout(sair do sistema) e menu (para mostrar o menu) 2) Criar o diretório views/login/ com os arquivos index.thtml e menu.thtml
  • 43. Controle de acesso 3) Verificar se foi realizado o login no momento do acesso da interface de administração. Alterar o arquivo app_controller.php. Adicionar o código abaixo: //funcao que é executada antes de qualquer método dos controladores function beforeFilter() { if(i sset($ this-> params ['admi n'])) { //se foi acessado a interfa ce de admini straca o if(!$this->Session->check('logado')) { $this->Session->setFlash('Acesso negado'); $this->redirect('/login'); } } } Estes arquivos alterados estão em anexo a apresentação
  • 44. Upload das Fotos Para realizar o upload das fotos é preciso alterar o controlador fotos_controller.php e a visão add.thtml. No fotos_controller.php é preciso adicionar o código abaixo no método admin_add(): if(isset($this->data['Foto']['arquivo']['tmp_name'])) { //co piando o arq uivo p ara o direto rio fi nal copy ($this - >data[' Foto'] ['arqu ivo'][ 'tmp_n ame'], quot;/var/ www/xx e/web imoveis /webro ot/img /quot;.$th is- >data[' Foto'] ['arqu ivo'][ 'name' ]); //su bstitu i o ca mpo ar quivo por so mente o nome do ar quivo $thi s->dat a['Fot o']['a rquivo '] = $ this- >data[' Foto'] ['arqu ivo'][ 'name' ]; } if($this->Foto->save($this->data)) { ....
  • 45. Upload das Fotos E no arquivo views/fotos/admin_add.thtml é necessário alterar o objeto do formulário para um tipo “file” e modificar a tag <form> : ... <form action=quot;<?php echo $html->url('/admin/fotos/add'); ? >quot; method=quot;postquot; enctype=quot;multipart/form-dataquot;> ... <?php echo $html->file('Foto/ arquiv o');?>
  • 46. 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. Vamos fazer um pequeno exemplo. Uma pequena busca de imóveis usando Ajax. Primeiro é preciso criar um novo controlador para a aplicação. No diretório controllers foi criado um novo arquivo, chamado buscas_controller.php:
  • 47. buscas_controller.php <?php class BuscasController extends AppController { var $name = 'Bus cas'; //nome do co ntrola dor var $helpe rs = a rray(' Html', 'Aja x' ); //uso dos he lpers var $uses = arra y(quot;Imo velquot;); //ind ica qu al mod elo us ar func tion i ndex() { //f uncao da pag ina in icial } func tion u pdate () { $consulta = $this->params[quot;formquot;][quot;localizacaoquot;].quot;%quot;; $this->set('imovels',$this->Imovel- >findAll(quot;Imovel.localizacao LIKE '$consulta'quot;)); $this->layout = quot;ajaxquot; ; //usar o layout ajax e não html } } ?>
  • 48. Ajax 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.thtml update.thtml
  • 49. index.thtml <?php echo $html->charsetTag('UTF-8')?> <?php echo $javascript->link('prototype')?> <?php echo $javascript- >link('scriptaculous.js?load=effects')?> <?php echo $ajax->form(array('action' => '/buscas/update'), 'imovel', array('update' => 'resultados')); ?> <input type=quot;textquot; name=quot;localizacaoquot;> <input type=quot;submitquot; value=quot;Pesquisarquot;> <div id=quot;resultadosquot;> </div> As primeiras linhas carregam os arquivos .js necessários. Com o $ajax->form é criado um formulário cujo action é a função update. Os outros parâmetros são o modelo (imovel) e as opções (neste caso está definindo que a função update vai alterar a div resultados).
  • 50. update.thtml <?php echo $ajax->div('resultados'); ?> <?php foreach($imovels as $imovel): ?> <h2><?php echo $imovel['Imovel']['descricao']?> na imobiliaria <?php echo $imovel['Imobiliaria']['nome']?></h2> <h3>Detalhes</h3> Localização:<?php echo $imovel['Imovel']['localizacao']; ? ><br> Quartos:<?php echo $imovel['Imovel']['quartos']; ?><br> Garagem:<?php echo $imovel['Imovel']['garagem']; ?><br> Valor:<?php echo $imovel['Imovel']['valor']; ?><br> <?php endforeach; ?> <?php echo $ajax->divEnd('resultados'); ?> Este é o código que irá mostrar os resultados.
  • 51. 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 Tem um nome legal :-)
  • 52. Referências http://www.cakephp.org http://www.cakephp.com.br http://bakery.cakephp.org/ http://cakeforge.org/
  • 53. Atenção! O próximo slide é uma prova da cara-de-pau do palestrante!
  • 54. Propaganda
  • 55. Depoimentos Melhor que um roundhouse kick!
  • 56. Depoimentos A força sinto nesse livro!
  • 57. Contato Elton Luís Minetto eminetto@gmail.com http://www.eltonminetto.net