Você está na página 1de 70

Sumario

Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

!ntendendo Banco
Ima ine que "c tenha uma #i#lioteca e queira

fa$er um catalo o dos seus li"ros


ID ( / 1 4 5 + %utor )o#erto )o#erto Bira Bira 6uis Bira &ascido 'itulo (*+, !ditor VI -. (*+, P0thon 1.. (**/ MM2S3/4 (**/ MM2S3 / (*,+ CSS (**/ MM2S3 1 Pa !ditora &o"atec &o"atec &oisqDa /4/ &oisqDa *. &o"atec /41 &oisqDa

O#ser"e que tem dados sendo arma$enados mais de uma "e$

!ntendendo Banco
%ssim se7aramos o #anco em ta#elas
'a#ela %utor Id &ome%no ( )o#erto / Bira (**/ 1 6uis (*,+ 'a#ela 6i"ro Id &omePa ( !ditor VI / P0thon 1 MM2S3 4 MM2S3 / 5 CSS *. + MM2S3 1 'a#ela Id (*+, / !ditora &ome ( &o"atec &oisqDa

%utor8id!ditora8id -. ( ( 1.. ( ( /4 / / /4/ / / 1 ( /41 / /

)elacionamentos
'a#elas 7ossuem relacionamentos
N e ev r c es 1

6IV)O

N pu blic a 1

%9'O)

!DI'O)%

!:em7los de Bancos
HD
Id ;a#ricante 'amanho 'i7o Com7utador8id

Placa de Video
Id ;a#ricante Modelo Com7utador8id

Computad or
Id &ome

Memoria
Id 'amanho ;a#ricante ;requencia

Monitor
Id Pole ada ;a#ricante

!:em7los de Bancos
Seriados
Id &ome Status Dia da Semana

Temporad as
Id &umero Seriado8id

Episodio
Id &ome &umero 'em7orada8id Dia do Mes

!:em7los de Bancos
Posts
Id 'itulo Cor7o Data 9suario8id

Comentari os
Id Comentario Data Post8id 9suario8id

Usuario
Id &ome Senha &ascimento !mail

!:em7los de Bancos
Campeonat o
Id %no &ome Data

Time
Id &ome

Integrante
Id &ome

Jogo
Id 'itulo Su#titulo Cor7o 6ocal

Rodada
Id &umero 'urno

!:em7los de Bancos
Campeonat o
Id %no &ome Data

Time
Id &ome

Integrante
Id &ome

Jogo
Id 'itulo Su#titulo Cor7o 6ocal

Rodada
Id &umero 'urno

&osso Banco
Con"en<=es>
Posts
id title #od0 created modified

Comments
id #od0 created 7ost8id user8id

Usaremos as conevences do Cake para facilitar a minha vida. -Nome das tabelas - created e modified - post_id e user_id - username e password

Users
id username 7assword

Criando nosso #anco


9tili$ando o m0sql, fa$emos> Para lo ar no #anco>

# mys l !u root ! p

Criando o no"o #anco> mys l" create database aulacake# Criando o meu usuario> mys l" $rant all on aulacake.% to aulacake&'(localhost& identified by &biraviadin&# Para administrar o #anco usaremos o 7h7m0admin

7h7M0%dmin

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

CakePHP
CakePHP eh um framework 7ara %7lica<=es ?e# ;ramework de Software>
com7reende de um con@unto de classes im7lementadas em

uma lin ua em es7ecAfica, usadas 7ara au:iliar o desen"ol"imento de softwareB C?iki7ediaD

Come<ou em /..5 9ltima "ersEo estF"el (B1B. Site> cake7h7Bor

Site do CakePHP

%rquitetura MVC
O CakePHP utili$a a arquitetura MVC Basicamente eh o se uinte>
Models> sEo os res7onsF"eis 7or se comunicar com o #anco,

7ara sal"ar, modificar e deletar os dados Controller> sEo eles quem mandam os models se comunicarem com o #anco, rece#e a res7osta e manda 7ara os "iews Views> sEo eles quem mostram 7ara os usuFrios o resultados das consultas 7edidas ao #anco

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

Bai:ando o CakePHP
Para #ai:ar o Cake #asta ir no site e #ai:ar a

ultima "ersao VocG "ai escolher entre tarB $ C-14HBD e o $i7 C(B1MBD, dah na msm Descom7acteIo no seu diretJrio we# Mude o nome da 7asta e acesse ela no seu #rowser
!:> htt7>KK7ahnoisKL/..5(..*55Kaulacake

Primeira "isao do site

Possi"el !rro
O cake 7ode dar um erro quando usado com o

modulo userdir do a7ache Se a sua url for desse ti7o>


htt7>KKmeusiteKLeuKa77docakeK

eh 7ossA"el que o site nEo a#raB Para corri ir o erro de"emos modificar um arqui"o oculto chamado Bhtaccess locali$ado na que "c descom7actouB

Modificando o Bhtacess
;a<a a se uinte modificacao no arqui"o>
MIfModule mod8rewriteBcN )ewrite!n ine on )ewriteBase KLeuKa77docake )ewrite)ule OP a77Kwe#rootK Q6R )ewrite)ule CBSD a77Kwe#rootKP( Q6R MKIfModuleN

;a<a a mesma modifica<Eo no arqui"o

a77Kwe#rootKBhtaccess

Core T %PP
&a 7asta que "c descom7actou

encontraremos as su#7astas>
a77 eh onde fica o seu site cake eh o cora<Eo CcoreD do cake 7lu ins 7lu ins 7ara facilitar ainda mais "endors nEo sei e nem quero sa#er 7or enquanto

O core contem as informa<=es "itais das suas

a77sB Por isso nEo che uem 7erto se nEo sa#em o que estEo fa$endoB 9m core 7ode ter "arias a77s

Os 1 warnin s de start
2uando "c a#re o seu site "ai "er um

e:em7lo 7ronto @ah, com o 7adrao do cake7h7 VerF tam#Um 7ossA"eis mensa ens em amarelo, sEo elas>
Please change the value of 'Security.salt Your tmp directory is not writable Your database configuration file is NOT present

Securit0 Salt
&o arqui"o a77Kconfi KcoreB7h7,

7ossi"elmente na linha (+5, terF>

onfigure!!write"'Security.salt'# '$Yh%&'b()y*f+,fs-gu.o/ub0wvni1-%(2ga &mi'34

O Securit0 Salt ser"e 7ara a

era<Eo de Hashes, sem7re que 7recisar erar um, o cake "ai 7e ar o "alor dessa strin Pode usar qualquer strin , contanto que nEo se@a facilmente adi"inhada Isso eh utili$ado 7or e:em7lo, na cria<Eo do hash da senhas de usuFrios do site

Diretorio tm7
O diretJrio tm7 da sua a77, de"e ser writa#le Se ele ainda nEo esti"er, #asta usar o

comando chmod>

chmod I) ,,, a77Ktm7

Confi uracao do Banco


Por ultimo, de"emos confi urar o #anco !dite o arqui"o a77Kconfi Kdata#aseB7h7Bdefault
var 5default 6 array" 'driver' 67 'mys)l'# 'persistent' 67 false# 'host' 67 pahnois'# 'login' 67 aulaca8e'# 'password' 67 biraviadin'# 'database' 67 aulaca8e'# 'prefi,' 67 ''# 34

)enomeie o arqui"o 7ara data#aseB7h7

Modulo mod8rewrite
Para que o cake7h7 funcione o modulo

rewrite do a7ache de"e estar ha#ilitado Voce 7ode usar o comando a7ache/ctl IM 7ara sa#er se o modulo esta sendo usado Procure na res7osta do comando a linha>
rewrite8module CsharedD

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

Models
Vamos entEo criar os nossos models Por con"en<Eo cada ta#ela no #anco terF um

model corres7ondente e o nome do model serF o nome da ta#ela no sin ular Para criar um model, crie um arqui"o a77KmodelsKMnomedata#elaNB7h7 'odos os models sEo classes em 7h7 e herdam da classe %77Model Vamos criar o model da ta#ela 7ost no 7rJ:imo slide

Model de Post
%rqui"o a77KmodelsK7ostB7h7
)*php class +ost e,tends -pp.odel / var 0name 1 &+ost&# 2 *"

Controllers
Vamos entEo criar os nossos controllers Por con"en<Eo cada ta#ela terF um controller

corres7ondente e o nome do controller serF o nome da ta#ela no 7lural T controller Para criar um controller, crie um arqui"o
a77KcontrollersKMnomedata#elaN8controllerB7h7

'odos os controllers sEo classes em 7h7 e

herdam da classe %77Controller Vamos criar o controller da ta#ela 7ost no 7rJ:imo slide

Controller de Post
%rqui"o a77KmodelsK7ost8controllerB7h7
)*php class +ostsController e,tends -ppController / var 0name 1 &+osts&# 2 *"

Metodos
'odo controller eh com7osto de mUtodos,

esses mUtodos sEo as fun<=es da classe Cada mUtodo 7ode estar relacionado a al um "iew Os mUtodos sEo chamados tam#Um de actions Os metodos mais comuns sEo>
inde:, add, "iew e delete

%ction Inde:
%rqui"o a77KmodelsK7ost8controllerB7h7
)*php class +ostsController e,tends -ppController / var 0name 1 &+osts&# function inde,34 / 0this-"set3&posts&5 0this-"+ost-"find3&all&44# 2 2 *"

Metodos @ah 7rontos


&o arqui"o a77KmodelsKcontrollerB7h7 temos

todos os metodos 7rontos 7ra "c, ou se@a, nEo enconste lah 'odos os outros controller herdam de %77Controller, e %77Controller herda tudo de Controller MUtodos mais comuns>

set

redirect

7a inate

request%ction

'emos tam#Um os mUtodos que a7arentam

ser de controllers, mas na "erdade sEo de models

Metodos de Controllers
set

cria uma "ariF"el 7ara o seu "iew PthisINsetC V#iraW, V"iadinWD cria uma "aria"el P#ira cu@o "alor eh "iadin ser"e 7ara fa$er 7a ina<Eo dos dados rece#idos do model, serah "isto mais a frente chama um action de qualquer controller e rece#e o retorno dele Pdado XPthisINrequest%ctionCVKcommentsK7rimeiroWD @o a o retorno do metodo V7rimeiroW do controller VcommentsW na "aria"el Pdado

7a inate

request%ction

Metodos de Models
find CPt07e, P7aramsD
7ede ao #anco os dados do Model os "alores de Pt07e 7ode ser>

VfirstW 9 retorna apenas o primeiro resultado encontrado VcountW 9 retorna a )uantidade de resultados encontrados VallW 9 retorna todos os resultados VlistW 9 retorna todos os resultados em uma pe)uena lista Vnei h#orsW 9 retorna o resultado anterior e o pro,imo do pes)uisado

P7arams "ai ser um arra0 com as o7coes da #usca


array" 'conditions' 67 array"':odel.field' 67 5valor3# 'fields' 67 array"':odel.field;'# :odel.field-<3# 'order' 67 array"':odel.created'# ':odel.field' $=S '3# 'limit' 67 n 3

Outros metodos de Models


find%llB0Mcam7oN C V"alorW D findB0Mcam7oN C V"alorW D quer0 C VS!6!C' S ;)OM 7ostYW D read C VnomeW , P"alor D create C D sa"e C Parra0 D sa"e%ll C Parra0s D delete C Pid D delete%ll C Pconditions D

Views
Os "iews ficam locali$ados na 7asta a77K"iewsK Dentro dessa 7asta e:istem su#7astas, cada

controller terF uma su#7asta com seu nome Por con"en<Eo a 7asta serF i ual o nome da ta#ela do #anco no 7lural Cada "iew serF um arqui"o Bct7 dentro da 7asta do controller, e de"erF ter um action criado no controller Se "oce criou a function inde: no controller do 7ost, a ora "amos criar o "iew inde:Bct7 em a77K"iewsK7osts

View Inde:
%rqui"o a77K"iewsK7ostsKinde:Bct7
)pre" )*php print_r30posts4 *" )6pre"

!ntre no site 7ara "er o resultado>

htt7>KK7ahnoisKL/..5(..*55KaulacakeK7ostsKinde:K

9rl do Cake
htt7>KKwwwBinfBufesB#rKLmssoaresKsu7ortaoK7ostsK"iewK(,

site

minha%77

%ction

Controller Parametros

%dicionando Dados
Coloque o cJdi o a#ai:o no controller do 7ost
function add34 / if 37empty30this-"data44 / if 30this-"+ost-"save30this-"data44 / 0this-"8ession-"set9lash3(8eu +ost foi salvo.&4# 0this-"redirect 3array3&action& 1" &inde,&44# 2 2 2

%dicionando Dados
Crie o "iew addBct7
)h1"-dd +ost)6h1" )*php echo 0form-"create3&+ost&4# echo 0form-"input3&title&4# echo 0form-"input3&body&5 array3&rows& 1" &:&44# echo 0form-"end3(8alvar +ost&4# *"

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

Hel7ers
O nome @F di$ tudo, estEo aqui 7ara a@udar Os hel7ers 7adr=es estao na 7asta

cakeKli#sK"iewsKhel7ersK
a@a: cache form html @s @a"ascri7t num#er

7a inator )SS session te:t time :ml

Hel7er ;orm
Criando um formulario>
echo 5form97create"'Post'34

Su#stitui o cJdi o html


>form id6?Post@dd2orm? method6?post? action6?Aaulaca8eApostsAadd?7

;echando um formulFrio
echo 5form97end"Salvar'34

Su#stitui o cJdi o html


>div class6?submit?7>input type6?submit? value6BSalvar? A7>Adiv7>Aform7

Hel7er ;orm
in7ut C Pcoluna , arra0 Po7tions D
echo PformINin7utCZ#od0Z, arra0CZrowsZ XN Z5ZDDY

De7endendo do ti7o da coluna o cake a@eita o

formulFrio 7ara "c


strin #oolean, tin0intC(D te:t 7assword date datetime time

te:t check#o: te:tarea 7assword dia mes ano selects dia mes ano hora minuto selects hora minuto selects

Hel7er ;orm
in7ut C Pcoluna , arra0 Po7tions D Os "alores 7ara o arra0 Po7tions 7ode ser>
array" 'type' 67 'file# 'options' 67 array";#-#'#C#D3# 'label' 67 'The /ser @lias# 'default'67'Sugar# 'rows' 67 'D'# 'cols' 67 'D# 'empty' 67 '"choose one3' 3

Hel7er ;orm
in7ut C Pcoluna , arra0 Po7tions D Os "alores 7ara o arra0 Po7tions 7ode ser>
array" 'type' 67 'file# 'options' 67 array";#-#'#C#D3# 'label' 67 'The /ser @lias# 'default'67'Sugar# 'rows' 67 'D'# 'cols' 67 'D# 'empty' 67 '"choose one3' 3

Hel7er Html
CSS
echo PhtmlINcssCZcakeB enericZDY

Su#stitui o cJdi o html


Mlink relX[st0lesheet[ t07eX[te:tKcss[ hrefX[KaulacakeKcssKcakeB enericBcss[ KN

&ormalmente essa echo fica no arqui"o,

cakeKli#sK"iewsKdefaultBct7 Co7ie esse arqui"o 7ara a77K"iewsKla0outK &esse arqui"o fica o la0out da sua a7lica<Eo, o la0out eh a 7arte que nEo muda no seu site

Hel7er Html
Ima e
echo PhtmlINima eC[reci7esK+B@7 [, arra0C [alt[ XN [Brownies[, ZurlZ XN VKreci7esK"iewK+W DDY

Su#stitui o cJdi o html


Ma hrefX[Kreci7esK"iewK+[N Mim srcX[Kim Kreci7esK+B@7 [ altX[Brownies[ KN MKaN

Ima e
echo PhtmlINlinkCZ!nterZ, ZK7a esKhomeZ, arra0CZclassZXNZ#uttonZ,Ztar etZXNZ8#lankZDD

Su#stitui o cJdi o html


Ma hrefX[K7a esKhome[ classX[#utton[ tar etX[8#lank[N!nterMKaN

Hel7er Html
Outros mUtodos do hel7er do html
charset doc'07e meta st0le ta di" 7ara scri7t url

Hel7er )SS
%ntes de mais nada, "c de"e adicionar uma

linha em

a77Kconfi KroutesB7h7

1outer!!parse=,tensions"'rss'34

%dicione em a77KcontrollersK7osts8controllerB7h7
var 5components 6 array"'1e)uestEandler'34

Modifique o mUtodo inde: de 7osts>


function inde,"3F if" 5this971e)uestEandler97is1ss"3 3F 5posts 6 5this97Post97find"'all'# array"'order' 67 'Post.created $=S '334 5this97set"compact"'posts'334 5this97set"'channel'#array"'title'67'@ula de a8e 9 Posts'334 G else F 5this97set"'posts'# 5this97Post97find"'all'334 G G

Hel7er )SS

Hel7er 'ime
Dei:a um formato date time mais #onito>

nice 3 0date 4 nice8hort 3 0date 4 time-$oCnDords30date4

;ue5 <an 1st =>>?5 1@A=B <an 1st =>>?5 1@A=B ;oday5 1@A=B on =16>16>? : months5 : weeks5 = days a$o E minutes a$o = seconds a$o

Vc 7ode mudar o 7adrao dessas funcoes em

cakeKli#sK"iewsKhel7ersKtimeB7h7 O recomendado eh que "c sal"e esse hel7er na a77 e modifique lah

Data Validation
9ma coisa que "ai te a@udar no cake eh "alidar os

dados antes de add al o % "alida<Eo eh tratada nos Models, a#ra o model do 7ost e 7onha o cJdi o>
var 5validate 6 array" 'title' 67 array" 'aplhanumeric' 67 array" 'rule' 67 array"'alphanumeric'3# 'message' 67 'O titulo soh pode ter numeros e letras< 'body' 67 array" 'not=mpty' 67 array" 'rule' 67 array"'not=mpty'3# 'message' 67 'Nao dei,e o corpo do post em branco< 34

3#

3#

3# 3#

'estando a Validation

'i7os de Validation
Vc 7ode colocar e:7ress=es re ulares na

"alida<Eo, mas 7ara facilitar sua "ida o cake @ah tem al umas 7rontas>

al7ha&umeric e:tension #etween file #lank i7 #oolean is9nique cc min6en th com7arison not!m7t0 date 7hone decimal 7ostal email url equal'o

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

Pre7arar o Cake Bake


Primeiro temos que alterar a "ariF"el de

am#iente P%'H, 7ara ela achar o caminho do console e do 7h7 Console eh onde fica o e:ecutF"el cake cake #ake eh o camando que "ai fa$er tudo 7or "c
5 P@TE65P@TE!AhomeA-((D;((&DDAaulaca8eAca8eAconsoleA 5 e,port P@TE

% ora "amos #otar o #olo no forno

Bakeando o site
&o terminal, entre na 7asta a77
5 cd HApastawebAaulaca8eAappA

)ode o comando>
5 ca8e ba8e

!scolha a o7<Eo M de model ;a<a a mesma coisa 7ara os tres models De7ois fa<a 7ara controllers e "iews

Bakeando o site
% ora acesse o site 'udo esta 7ronto se uindo um 7adrEo do

cake7h7 Vc 7ode alterar o 7adrEo do seu @eito, assim "c aca#a de #akear o site e @ah tah tudo 7ronto

Sumario
Banco de Dados O que eh CakePHP Instalando o Cake Models, Controllers e Views Mais ferramentas do CakePHP Cake Bake a ma ica do CakePHP

Com7onents
Os com7onents 7ro"Gm "arias funcionalidades

que sEo usadas normalmente Os com7onents 7adr=es estEo na 7asta cakeKli#sK"iewsKcom7onentsK


acl auth cookie email requesthandler securit0 session

Com7onents %uth
% 7rimeira coisa a ser fa$er eh ati"ar o

com7onente no controller>
var 5components 6 array"'@uth'34

Para ati"ar em todos os controllers, #asta

adicionar essa linha em %77Controller % ora todo o seu site esta #loqueado 7ara quem nEo esta lo ado !ntao "amos fa$er a tela de lo in

Com7onents %uth
&o controller 9ser, crie os dois actions>

lo in
function login "3 F G

lo out
function logout "3F 5this97redirect"5this97@uth97logout"334 G

% ora crie o "iew de lo in OBS> lo out nEo 7recisarF de um "iew

Com7onents %uth
%rqui"o a77K"iewsKusersKlo intBct7
>Iphp echo 5session97flash"'auth'34 echo 5form97create"'/ser'# array"'action' 67 'login'334 echo 5form97input"'username'34 echo 5form97input"'password'34 echo 5form97end"'Jogin'34 I7

Com7onents %uth
Mas e se eu nEo quiser que todo o meu site

se@a #loqueado 7ara nEo users Coloque no controller que nEo queira ser #loqueado a fun<Eo #efore;ilter Dentro de allow coloque as actions que serEo 7ermitidas a "isitantes !:em7lo em a77KcontrollersKusers8controllerB7h7
function before2ilter"3 F 5this97@uth97allow"'add'34 G

Por ultimo> )otas


&o arqui"o a77Kconfi KroutesB7h7 "oce 7ode

remodelar a url do site


1outer!!connect" 'Alogar'# array"'controller' 67 users'# 'action' 67 'login'3 34 1outer!!connect" 'A omentariosAK'# array"'controller' 67 comments'# 'action' 67 inde,'3 34 1outer!!connect" 'APostadosA!actionAK'# array"'controller' 67 posts'3 34

Você também pode gostar