Você está na página 1de 10

PROFESSORA VERONICEDEFREITAS

Graduao:TecnologiaemProcessamentode Dados(UNOPAR) Especializao:AnliseeDesenvolvimentode Sistemas(UNIFIL) Mestrado:CinciadaComputao (UFRGS)

Introduo SEMINRIOSVI
Objetivo:apresentarconceitosdeutilizaode framework paraodesenvolvimentodeaplicaes web.

Aula2

FrameworkCAKEPHP

Estrutura
Introduo; Arquitetura MVC; Programao CakePHP; Requisitos CakePHP; Instalao/Configurao; CakePHP ArquiteturaMVC; Exemplos.

Oque umframework
Umframeworkcapturaafuncionalidadecomuma vriasaplicaes.

Definio Framework
Umframeworkprovumasoluoparauma famliadeproblemassemelhantes; Umframeworkouarcabouo umaabstraoque unecdigoscomunsentrevriosprojetosde softwareprovendoumafuncionalidadegenrica; Framework umainfraestrutura(esqueleto)de umafamliadeaplicaesprojetadoparaser reutilizado.

Frameworks
Osframeworkssobaseadosemumasriede padresdedesenvolvimentoj consolidado: MVC umacrnimoparaModel,View, Controller(Modelo,VisoeControlador).A idia separartodoodesenvolvimentodeuma aplicaonestastrspartes,oucamadas: Model,Controller,View.

AArquiteturaMVC
CamadadeModelo: ondeseprocessae respondeasrequisiesdousurioepodeinvocar alteraesnoModel(partedaprogramao destinadaaotratamentodosdados); Controle(Controller): ondeseprocessae respondeasrequisiesdousurioepodeinvocar alteraesnoModel(responsvelpelasregrasde negcio).

AArquiteturaMVC
Viso(View): aapresentaodosdadosparao usurio,normalmenteumapginaHTMLmaspode geraroutrostiposdedocumentoscomoPDF,XLS, etc.

Fluxodeexecuo MVC

Fonte: http://net.tutsplus.com/tutor ials/other/mvcfornoobs/

Oque CakePHP?
CakePHP umaframeworkquepermiteo desenvolvimentorpidodeaplicaesparaweb emPHP; OCakePHP baseadonoframeworkRubyon Rails eutilizapadresdeprojeto conhecidos,tais comoActiveRecord,MVC (ModelViewController), etc.

Programao CakePHP

Requerum conhecimentosobre OrientaoaObjeto

<?php classMysql{ var$Servidor=localhost; var$Usuario=root; var$Senha=; varBanco=aula;

PHP Programao OrientadaaObjetos

functionAbraConexao(){ mysql_conect($this>Servidor,$this>Senha) ordie(mysql_error)); mysql_select_dv($this>Banco); } } $MySql=newMysql; $Mysql>AbreConexao(); ?> Geralmente colocado emoutroarquivo.

Requisitos CakePHP
OframeworkCakePHPfuncionaemqualquer servidorwebquesejacapazdeexecutarscriptsem linguagemPHP4ousuperior; Servidorweb:Apache2.0,LightHTTP,IIS.Sendo recomendadoautilizaodoapachecomo mdulomod_rewrite; BancodeDadossuportadospeloCakePHP:MySQL (4ousuperior),PostgreSQL,Firebird,MSSQL SERVER,Oracle,SQLite,ODBC,ADOdb.

ConfigurandooApache
OarquivodeconfiguraodoApache o httpd.conf(Nowindowsoarquivoser encontrado dentrododiretrio"conf",geralmentelocalizado nodiretriodeinstalaodoApache); Parahabilitaromdulorewritenoservidorapache bastadescomentar*aseguintelinha:
#LoadModulerewrite_modulemodules/mod_rewrite.so

InstalandooCakePHP
Oprimeiropassoparaainstalaodoframework fazeroseudownloadnoendereo(sugiroaverso 1.3.13): http://cakephp.org Apsodownloaddosfontes, necessrio descompactaroarquivonoDocumentRootdo apache. PastadaDocumentRoot:C:\...\htdocs\

localhost
http://localhost/cake

Oarquivodeconfigurao database.php
Parainiciarodesenvolvimentodeumaaplicao, necessrioapenasconfigurarobancodedadospor meiodoarquivo: diretrio_do_cake/app/conf/database.php necessriorenomearoarquivodatabasedefalt paradatabase.php. Obancodedados configuradopeloarray: $default,que ilustradoaseguir.

Configuraodatabase.php
classDATABASE_CONFIG{ var$default=array( 'driver'=>'mysql', 'persistent'=>false, 'host'=>'localhost', 'port'=>'', 'login'=>'root', 'password'=>'vero1234', 'database'=>'mydb', 'schema'=>'', 'prefix'=>'', 'encoding'=>'' ); }

Oarquivodeconfiguraocore.php
Varivel debug Descrio Configuraonveldemensagensdedebugque ser mostradonatela. 0=Modosemnenhumamensagem,parauso dosistemaemproduo. 1=Mostramensagensdeerroseadvertncias. 2=Mostramensagensdeerros,advertnciase comandosSQL. 3=Mostramensagensdeerros,advertncias, comandosSQLevariveisdocontrole. ...

PERGUNTAS

...

CAKE/ArquiteturaMVC
CakePHPcomoamaioriadosFrameworksweb utilizaaarquiteturaMVCquedivideaaplicao emtrscamadasModelo(Model),Viso(View)e Controle(Controller)paratornlademaisfcil manutenopermitindoquealteraesemuma dascamadascausempoucainfluencianasoutras.

RequisiotpicadoCakePHP
Oexemploaseguirapresentaumarequisiofeita aoCakePHP:

Ocliente(1)fazumarequisioao Dispatcher(componenteresponsvelpor encaminharrequisies)queidentificaqual Controllerdeveserchamadoerepassaa requisioparaele(2). Ocontroleverificaqualaodevetomar(regras denegcio),esenecessrioutlizaoModel salvandooulendodados(3,4)eapspassao controleparaoView(5). OViewentotratadeformatararespostaea enviaparaocliente(6).

Estruturabsicadeorganizao
Oframeworkprovtambmumaestruturabsica deorganizao,desdenomesdearquivosat nomesdetabelasdebancosdedados,mantendo todasuaaplicaoconsistenteelgica.Listade convenesdisponvelem: http://book.cakephp.org/pt/view/330/Criando obancodedadosdo Blog#!/pt/view/22/ConvenesnoCakePHP

Exemplo1 HelloWorld

EXEMPLOS
Paraexecutar Run http://localhost/cake/hellos Alternativamente http://localhost/cake/hellos/index

Model(MODELO)
Modelodoexemplo01apesardemuitosimples, estemodeloj exibealgunsaspectostpicosdos modelos:representadados nestecasoapenasa string"Helloworld!" edevolveessesdadospara umcontrolador.

Model(MODELO)
<?php classHelloextendsAppModel{ var$name='Hello'; var$useTable=false;//Nodatabase functiondata(){return'Helloworld!';} } ?> .../cake/app/models/hello.php

Controlador
Controlador. Asfunesprincipaisdefinidasnum controladorchamamseaes.Estecontrolador defineapenasaaoindex.Estaaoexibeum comportamentotpico: ativadapararespondera umpedidofeitoaoservidor;depoispededadosao modeloeenviaosparaovisualizadorapropriado.

Controlador
/cake/app/controllers/hellos_controller.php
<?php classHellosControllerextendsAppController{ var$name="Hellos"; var$uses=Array('Hello');//Themodel functionindex(){ $data=$this>Hello>data(); $this>set('data',$data); } } ?>

Index.ctp
Visualizador. Estevisualizadorapresentadados, nestecasoosdadosqueforamcolocadosna varivel$datapelocontrolador. /cake/app/views/hellos/index.ctp
<hrsize=1/> <h1><?phpecho$data?></h1> <hrsize=1/>

PERGUNTAS

Exemplo02
Aplicaocomfunes: ListagemgeralcomopesdeADICIONAR, ALTERAR,EXCLUIR

Exemplo aplicao CAKEPHP

http://book.cakephp.org/pt/view/330/CreatingtheBlog Database

Criandoo banco dedados

MYSQL(ADMIN) Criartabela
ExecuteoscriptabaixonaguiaSQL
CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL );

Nomedobanco dedados

MYSQL(ADMIN) Registros
ExecuteoscriptabaixonaguiaSQL:
/*Emseguida,inseriralgunsregistrosdeexemplo:*/ INSERTINTOposts(title,body,created) VALUES('Thetitle','Thisisthepostbody.',NOW()); INSERTINTOposts(title,body,created) VALUES('Atitleonceagain','Andthepostbodyfollows.', NOW()); INSERTINTOposts(title,body,created) VALUES('Titlestrikesback','Thisisreallyexciting!Not.', NOW())

Configurao bancodedados
classDATABASE_CONFIG{ var$default=array( 'driver'=>'mysql', 'persistent'=>false, 'host'=>'localhost', 'port'=>'', 'login'=>'root', 'password'=>'', 'database'=>'blog', 'schema'=>'', Configuraesdoarquivo 'prefix'=>'', 'encoding'=>'' database.php Pasta: ); cake\app\config\database.php }

CrieummodelPost CrieummodelPost
OsarquivosdaclassedemodeldoCakePHPficam em/app/modelseoarquivoqueiremoscriarser salvocomo/app/models/post.php; Anomenclaturadaclassesegueumaconvenoe muitoimportantenoCakePHP.Aochamarnosso modeldePost,oCakePHPpodeautomaticamente deduzierqueestemodelser usadonum PostsController,equemanipular osdadosdeuma tabeladobancochamadadeposts.
<?php classPostextendsAppModel { var$name='Post'; var$validate=array( 'title'=>array( 'rule'=>'notEmpty' ), 'body'=>array( 'rule'=>'notEmpty' ) ); } ?> oarquivoqueiremos criarser salvocomo /app/models/post.php.

CrieumPostsController
Ocontroller ondetodaalgicadenegciopara interaesvaiacontecer.Deumaformageral, o localondevocvaimanipularosmodelselidar comoresultadodasaesfeitassobrenossopost.
<?php classPostsControllerextendsAppController{ var$name='Posts'; Arquivochamado: } posts_controller.phpdentro ?> dodiretrio/app/controllers

posts_controller.php
<?php classPostsControllerextendsAppController{ var$name='Posts'; functionindex(){ $this>set('posts',$this>Post>find('all')); } } ?>
Localondeseroinseridosos outrosmtodos

View
/app/views/posts/view.ctp <! Arquivo:/app/views/posts/view.ctp> <h1><?phpecho$post['Post']['title']?></h1> <p><small>Criadoem:<?phpecho $post['Post']['created']?></small></p> <p><?phpecho$post['Post']['body']?></p>

add.ctp
Arquivo:/app/views/posts/add.ctp <! Arquivo:/app/views/posts/add.ctp> <h1>AdicionarPost</h1> <?php echo$form>create('Post'); echo$form>input('title'); echo$form>input('body',array('rows'=>'3')); echo$form>end('SalvarPost'); ?>

edit.ctp
Arquivo:/app/views/posts/edit.ctp <h1>EditarPost</h1> <?php echo$form>create('Post',array('action'=> 'edit')); echo$form>input('title'); echo$form>input('body',array('rows'=>'3')); echo$form>input('id',array('type'=>'hidden')); echo$form>end('SalvaroPost'); ?>

posts_controller.php
functionview($id=null){ $this>Post>id=$id; $this>set('post',$this>Post>read()); } functionadd(){ if(!empty($this>data)){ if($this>Post>save($this>data)){ $this>Session>setFlash('Seupostfoisalvo.'); $this>redirect(array('action'=>'index')); } } Funes inserirnopontoindicadonoslide } deintroduo:posts_controller.php

posts_controller.php

posts_controller.php
functionedit($id=null){ $this>Post>id=$id;

functiondelete($id=null) { $this>Post>delete($id); $this>Session>setFlash('Opostcomid:'.$id .'foiexcludo.'); $this>redirect(array('action'=>'index')); }

if(empty($this>data)){ $this>data=$this>Post>read(); }else{ if($this>Post>save($this>data)){ $this>Session>setFlash('Seupostfoi atualizado.'); $this>redirect(array('action'=>'index')); } } }

<h1>PostsdoBlog</h1> <?phpecho$html>link('AdicionarPost',array('controller'=> 'posts','action'=>'add'))?> <table> <tr> <! Arquivo: <th>Id</th> /app/views/posts/index.ctp> <th>Ttulo</th> <th>Criadoem</th> </tr> <! Aquivarremosnossoarray$posts,exibindoinformaes dopost> <?phpforeach($postsas$post):?> <tr> <td><?phpecho$post['Post']['id'];?></td> <td> <?phpecho$html>link($post['Post']['title'], "/posts/view/".$post['Post']['id']);?> </td> <td>

<?phpecho$html >link('Delete',"/posts/delete/{$post['Post']['id']}",null,'Are yousure?')?> <?phpecho$html>link('Edit', '/posts/edit/'.$post['Post']['id']);?> </td> <td><?phpecho$post['Post']['created'];?></td> </tr> <?phpendforeach;?> CONTINUAO: </table> <! Arquivo: /app/views/posts/index.ctp>

Materialdeapoio
CAKEPHP http://book.cakephp.org/pt http://cakephp.org/ http://www.wesleyk.com/blog/wp content/uploads/2009/08/apostila cakephp.pdf http://www.phpmg.com/wp content/uploads/2009/10/DanielGolgher ApostilaCakePHP.pdf

2011 Todos os direitos reservados.Uso exclusivo no Sistema de Ensino Presencial Conectado.

Você também pode gostar