Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Oque CakePHP?
CakePHP umaframeworkquepermiteo desenvolvimentorpidodeaplicaesparaweb emPHP; OCakePHP baseadonoframeworkRubyon Rails eutilizapadresdeprojeto conhecidos,tais comoActiveRecord,MVC (ModelViewController), etc.
Programao CakePHP
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
http://book.cakephp.org/pt/view/330/CreatingtheBlog Database
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;
<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