CakePhp DesenvolvimentoWebRápido(eIndolor) AlissonSANascimento alisson.sa.nascimento@gmail.com
Roteiro AidéiadeumFramework OqueéoCakePhp? Aestruturadosdiretórios ModelViewControl Componentes,Plugins,VendorseHelpers Bake AplicaçãoRápida Referências
AidéiadeumFramework Arquiteturapré definida Classesebibliotecasauxiliares Estruturadediretórios Códigosre usáveis Deveserfácildeusar,extensível,seguro!
PorqueusarumFramework? Agilidadenoprocessodedesenvolvimento Aplicaçõesmaisestáveis Organizaçãonocódigoenosarquivos ComandosSQLesquecidosporumtempo Foconalógicadenegócio Designereprogramadortrabalhandoemparalelo
OqueéCakePhp FrameworkfeitoemPHP! BaseadonoRubyonRails MVC(ModelViewControl) ActiveRecordMapeamentoER OO ActiveSuportBibliotecasbase ConvençãoenãoConfiguração Scaffolding Atualmente Stable1.1.19.6305 RC1.2.0.7296RC2,inclusivenorepositóriodoDebian
Quemestáusandohoje? Twinbler http://twimbler.com/ MapMe www.mapme.com NoseRub www.noserub.com acoruja www.acoruja.com Scratch http://scratch.mit.edu Sistemaqueseportacomoumprotocoloderedes sociaisdescentralizadas Scratchéumanovalinguagem deprogramaçãoquetornafácil paravocêcriarsuaspróprias históriasinterativas, animações,jogos,música,e arte etambémcompartilhar Mambo5CMS www.mamboserver.com www.eberfdias.com MozillaAddons https://addons.mozilla.org/pt BR/firefox/ suascriaçõesnainternet.
Configuração ModRewrite(/etc/apache/apache.conf) AllowOverrideAll(/etc/apache/sites enable/000 default) ex.:localhost/cake/meucontroller/minhaaction/1/teste Controller Action Parâmetros
EstruturadosDiretorios app views config elements controllers models errors helpers layouts pages plugins temp vendors views webroot webroot css cake files docs img vendors js
Model View Control
Model Control View Aprimeirainterfacelógicadaaplicação Validaçãodosdados Requisiçõesaobancodedados Salvararquivo: Porpadrãoprocuraatabelanobanco RAIZ/app/models/exemplo.php atabelaexemplos
Model Control View <?php classeventoextendsappmodel{ var$name='evento'; var$validate=array( 'id'=>valid_not_empty, 'nome'=>'/^.{10,64}$/', ); }?>
Model Control View Regrasdenegócio Geralmenterequisitamosobanconoscontrollers PodeounãosercorrelacionadocomumModel ObjetosdoModeljáestãocriados Salvararquivo: RAIZ/app/controllers/exemplos_controller.php PorpadrãoprocuraoModel: exemplo.phpcomaclasseexemplo
Model Control View <?php classeventoscontrollerextendsappcontroller{ var$name='eventoscontroller'; functionverevento($id){ if(!empty($id)){ this >set('eventos',findbyid($id));...?> CadaActionouFunçãopodeterumaView!
Model Control View Ainterfacecomousuário Forneceumamaneiradevisualizarosdados Nãoérecomendávelprocessardadosnasviews Podemosterváriassaídas:HTML,PDF,AJAX,XML... requisitando:localhost/cake/eventos/verevento/1 oarquivodevisualizaçãoaserrespondidoseria: RAIZ/app/views/eventos/ver_evento.thtml(.ctp)
Model Control View <h2>evento<?phpecho$eventos['0']['evento']['id'];?></h2> <p> <?phpforeach($eventosas$evento): echo($evento['evento']['nome']); endforeach;?> </p>
EstruturadosDiretórios app config elements controllers errors helpers views components models plugins layouts temp pages vendors views css webroot files img js cake docs vendors webroot
ComponentesePlugins Componentessãopartesquecompõemumconjunto Umpedaçodecódigore usável Temcomportamentoesperado Sessions,Cookies,Email,ACL(AccessControlList), RSS(FeedArticles)
ComponentesePlugins Pluginssãoadicionadospararealizarumatarefanão nativa Comportamentonãoépredefinido PhpGacl,Jquery,Tablesorter...
HelperseVendors Helperssãoclassesquetemfunçõesquesão comumentenecessáriosparaformatareapresentar osdadosdeformaútil. Sãodefinidosnoscontrollerseusadosnasviews $helpers=('html','form','ajax','javascript');(controller) <?phpecho$html >submit('adicionar')?>(view)
HelperseVendors Vendorssãoasbibliotecasexternasencontradasno diretório/vendor. Podesertantoparacontrollersouviews. Forneceronomedoarquivosemaextensão'.php' vendor('jpgraph/jpgraph_line'); vendor('alisson.h');
Bake Scriptparacriaçãoautomáticadearquivosentre configuração,models,controllers,viewseatéabase deumanovaaplicação Indicadoquandojásetenhaumafamiliaridadecomo CakePhp! encontra senodiretórioraiz/cake/scripts/bake.php InicialmenteexecutadonoTerminal
AplicaçãoSimples TrabalhandoeiniciandonoCakePhpcomosseus avisos. UtilizandooCakePhpBake!
DescompactandooCake...
Modulerewriteativado...
Configurandoaconexãoaobanco Salvarcomo databese.phpno mesmodiretorio RAIZ/app/config
Depoisdeconfigurado
Criado/app/view/linguas AplicaçãoDo CRUD <?php classlinguascontroller extendsappcontroller{ var$name='linguas'; var$scaffold; }?>
Depoisdecriadoocontrole.. Adicionado $validate <?php classlinguaextendsappmodel{ var$name='lingua'; var$validate=array( 'id'=>valid_not_empty, 'nomelingua'=>valid_not_empty, 'horario'=>valid_not_empty, ); }?>
Index(),Add(),Edit($id),Del($id),View($id) TelainicialeActionoufunçãopadrão
Index(),Add(),Edit($id),Del($id),View($id)
Index(),Add(),Edit($id),Del($id),View($id) 1ªlinhadeletadaapartirdesta action
Esabequantasviewseucriei? 0
CriandocomCakePhpBake Senão encontraro app,obake pedepara criar
CriandoomodelAluno Obake perguntará umporum
DeterminandoAssociações BelongsTo, HasOne, Percebam HasMany, HasAndBelongsToMany
Resultadoaluno.php <?php classalunoextendsappmodel{ var$name='aluno'; var$validate=array( 'lingua_id'=>valid_not_empty, 'nome'=>valid_not_empty, ); //TheAssociationsbelowhavebeencreatedwithallpossiblekeys,thosethatarenotneededcanberemoved var$belongsto=array( 'Lingua'=> array('classname'=>'lingua', 'foreignkey'=>'lingua_id', 'conditions'=>'', 'fields'=>'', 'order'=>'', 'countercache'=>'' ), ); }?>
CriandooControllernoBake
Resultadoaluno_controller.php <?php classalunoscontrollerextendsappcontroller{ var$name='alunos'; var$helpers=array('html','form'); functionindex(){ $this >Aluno >recursive=0; $this >set('alunos',$this >Aluno >findall()); } functionview($id=null){ if(!$id){ $this >Session >setflash('invalididforaluno.'); $this >redirect('/alunos/index'); } $this >set('aluno',$this >Aluno >read(null,$id)); }
Resultadoaluno_controller.php functionadd(){ if(empty($this >data)){ $this >set('linguas',$this >Aluno >Lingua >generatelist()); $this >render(); }else{ $this >cleanupfields(); if($this >Aluno >save($this >data)){ $this >Session >setflash('thealunohasbeensaved'); $this >redirect('/alunos/index'); }else{ $this >Session >setflash('pleasecorrecterrorsbelow.'); $this >set('linguas',$this >Aluno >Lingua >generatelist()); } } }
Resultadoaluno_controller.php functionedit($id=null){ } if(empty($this >data)){ if(!$id){ $this >Session >setflash('invalididforaluno'); $this >redirect('/alunos/index'); } $this >data=$this >Aluno >read(null,$id); $this >set('linguas',$this >Aluno >Lingua >generatelist()); }else{ $this >cleanupfields(); if($this >Aluno >save($this >data)){ $this >Session >setflash('thealunohasbeensaved'); $this >redirect('/alunos/index'); }else{ $this >Session >setflash('pleasecorrecterrorsbelow.'); $this >set('linguas',$this >Aluno >Lingua >generatelist()); } }
Resultadoaluno_controller.php functiondelete($id=null){ if(!$id){ $this >Session >setflash('invalididforaluno'); $this >redirect('/alunos/index'); } if($this >Aluno >del($id)){ $this >Session >setflash('thealunodeleted:id'.$id.''); $this >redirect('/alunos/index'); } } }?>
CriandoAsViewsComoBake Dessavezescreveu quatroarquivos
Dessaveztemosasviews
localhost/palestra/alunos/add Criadoautomaticamente porcausadotipoda associação Porquealguns estãoem negritoe 'Celular'não?
Perguntasoumaisperguntas?
Referências cakephp.org cakephp.com.br wikipedia tuliofaria.net vivaolinux.com.br