Você está na página 1de 152

CakePHP

Aprendendo a fazer o primeiro bolo

por Léo Hackin


Cardápio

Roteiro
O PHP ontem e hoje
Lógica x Apresentação
MVC
CakePHP
Aplicação exemplo: Blog
Conclusões
Mamma mia!

Pratos do dia

PHP à Carbonara
Lógica misturada a apresentação
Eita nóis!

Pratos do dia

Sistema Ovo-Cozido
Rápido, fácil mas sempre fede no fim
Oxente!

Pratos do dia

Arrumadinho MVC
Modelo-Visão-Controlador
Agora sim...

Pratos do dia

E para sobremesa ... BOLO!


Sobre o cozinheiro

Léo Hackin
Léo Hackin é desenvolvedor desde 96 e já
passou por algumas das principais empresas
de internet capixabas, desenvolvendo
soluções para internet, dispositivos móveis e
desktop. Apaixonado por PHP a 7 anos,
atualmente trabalha como analista de
soluções JavaEE para attPS Tech (São Paulo) e
como Consultor em soluções para internet
em empresas privadas.
O PHP ontem e hoje

O PHP ontem
O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples


O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples

POGramadores doidões
O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples

POGramadores doidões
Baixa remuneração
O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples

POGramadores doidões
Baixa remuneração
Consistência discutível
O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples

POGramadores doidões
Baixa remuneração
Consistência discutível
Falta de padrões de design
O PHP ontem e hoje

O PHP ontem

Linguagem para apps simples

POGramadores doidões
Baixa remuneração
Consistência discutível
Falta de padrões de design
O PHP ontem e Hoje

Agravantes
O PHP ontem e Hoje

Agravantes
Falta de conhecimento teórico de programação
O PHP ontem e Hoje

Agravantes
Falta de conhecimento teórico de programação

Rápido == feito nas coxas


O PHP ontem e Hoje

Agravantes
Falta de conhecimento teórico de programação

Rápido == feito nas coxas


Paradigma mal resolvido (Estrutural x OO)
O PHP ontem e Hoje

Agravantes
Falta de conhecimento teórico de programação

Rápido == feito nas coxas


Paradigma mal resolvido (Estrutural x OO)
Script Kiddies, sobrinhos e “amigos que mexem com
informática”
O PHP ontem e Hoje

Agravantes
Falta de conhecimento teórico de programação

Rápido == feito nas coxas


Paradigma mal resolvido (Estrutural x OO)
Script Kiddies, sobrinhos e “amigos que mexem com
informática”
Herança estrutural: funções redundantes, includes, etc ...
O PHP ontem e Hoje

O PHP hoje
O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas
O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas

OO verdadeiro
O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas

OO verdadeiro

Remuneração “de gente”


O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas

OO verdadeiro

Remuneração “de gente”

Montes e montes de documentação


O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas

OO verdadeiro

Remuneração “de gente”

Montes e montes de documentação

N projetos ... FRAMEWORKS!


O PHP ontem e Hoje

O PHP hoje
Maturidade para soluções corporativas

OO verdadeiro

Remuneração “de gente”

Montes e montes de documentação O tempo passa!

O tempo voa!
N projetos ... FRAMEWORKS!
Lógica x Apresentação

PHP gerando HTML


Lógica x Apresentação

PHP espaguete
Lógica x Apresentação

PHP espaguete
Lógica x Apresentação

Ops... Problemas!
Codificação e manutenção custosa
Quebra pau com designers
Redundância de métodos, funções, includes ...
Despadronização é ruim!!!
Segmentação da lógica
Lógica x Apresentação

Ops... Problemas!

PHP à Carbonara
Lógica x Apresentação

Ops... Problemas!

PHP à Carbonara
MVC

O que é MVC
MVC

O que é MVC
Padrão de arquitetura de software
MVC

O que é MVC
Padrão de arquitetura de software

Separação da aplicação em três partes:


MVC

O que é MVC
Padrão de arquitetura de software

Separação da aplicação em três partes:

Os dados da aplicação
MVC

O que é MVC
Padrão de arquitetura de software

Separação da aplicação em três partes:

Os dados da aplicação A apresentação da informação


MVC

O que é MVC
Padrão de arquitetura de software

Separação da aplicação em três partes:

Processa os eventos da aplicação

Os dados da aplicação A apresentação da informação


MVC

Características
MVC

Características
Base funcional para toda a aplicação
MVC

Características
Base funcional para toda a aplicação

Conjunto de ferramentas, classes ...


MVC

Características
Base funcional para toda a aplicação

Conjunto de ferramentas, classes ...

Consistência e produtividade
MVC

Características
Base funcional para toda a aplicação

Conjunto de ferramentas, classes ...

Consistência e produtividade

Desenvolvimento em paralelo
MVC

Características
Base funcional para toda a aplicação

Conjunto de ferramentas, classes ...

Consistência e produtividade

Desenvolvimento em paralelo

Manutenção e escalabilidade menos custosa


MVC

Como funciona, tio ?


MVC

Como funciona, tio ?


Browser envia requisição à aplicação
MVC

Como funciona, tio ?


Browser envia requisição à aplicação

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação
O controller processa a requisição
e acessa a lógica de negócio
(model) da aplicação

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação
O controller processa a requisição
e acessa a lógica de negócio
(model) da aplicação
O model acessa a base de dados
da aplicação para executar a ação
requisitada pelo controller

Mysql, Postgres,
Oracle e muitos
outros

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação
O controller processa a requisição
e acessa a lógica de negócio
(model) da aplicação
O model acessa a base de dados
da aplicação para executar a ação
requisitada pelo controller
O controller então seleciona a
view correspondente a ação

Mysql, Postgres,
Oracle e muitos
outros

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação
O controller processa a requisição
e acessa a lógica de negócio
(model) da aplicação
O model acessa a base de dados
da aplicação para executar a ação
requisitada pelo controller
O controller então seleciona a
view correspondente a ação
O controller renderiza a view
Mysql, Postgres, incluindo os dados de resposta
Oracle e muitos da ação
outros

http://site/hello
MVC

Como funciona, tio ?


Browser envia requisição à aplicação
O controller processa a ação
O controller processa a requisição
e acessa a lógica de negócio
(model) da aplicação
O model acessa a base de dados
da aplicação para executar a ação
requisitada pelo controller
O controller então seleciona a
view correspondente a ação
O controller renderiza a view
Mysql, Postgres, incluindo os dados de resposta
Oracle e muitos da ação
outros
O controller devolve a resposta
para o browser

http://site/hello
MVC

Frameworks PHP
CakePHP

O que é CakePHP
CakePHP é um framework de desenvolvimento
rápido para PHP que provê uma arquitetura
extensível para desenvolvimento, manutenção e
implantação de aplicacões. Usando padrões de
projeto como MVC e ORM com “convenção
ao invés de configuração”, o CakePHP reduz
custos de desenvolvimento e ajuda
desenvolvedores a “escrever menos código”.
CakePHP

O que é CakePHP
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CRUD (Create-Read-Update-Delete) integrado
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CRUD (Create-Read-Update-Delete) integrado
ActiveRecord (ORM)
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CRUD (Create-Read-Update-Delete) integrado
ActiveRecord (ORM)
Internacionalização
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CRUD (Create-Read-Update-Delete) integrado
ActiveRecord (ORM)
Internacionalização
Comunidade ativa e crescente
CakePHP

O que é CakePHP
Compatível com PHP 4 e 5
Arquitetura MVC
Helpers Ajax, HTML, JS e outros
Componentes nativos para Email, Sessões, Segurança ...
CRUD (Create-Read-Update-Delete) integrado
ActiveRecord (ORM) Ativa e crescente ?

NOFA!
Internacionalização Eu quero!

Comunidade ativa e crescente


CakePHP

Requisitos mínimos
Um computador =)

Servidor HTTP (Apache 2)


PHP4 ou PHP5
Base de dados (opcional)
MySQL, Postgres, SQL Server, Oracle, SQLite,
ODBC, ADOdb, Firebird DB2
Café, chá ou suco (opcional)
CakePHP

Instalando
Baixar o CakePHP (http://cakephp.org)

Descompactar o arquivo em seu servidor web


CakePHP

Instalando
Configurar o http.conf
CakePHP

Instalando
Configurar o http.conf
CakePHP

Instalando
Configurar o http.conf
CakePHP

Instalando
Configurar o http.conf
CakePHP

Instalando
Configurar o http.conf
CakePHP

Instalando
Execute e teste!
CakePHP

Estrutura Funcional
CakePHP

Estrutura Funcional
CakePHP

Estrutura Funcional
Model

View

Controller
CakePHP

Estrutura Funcional
Model
Behaviors e Datasources

View
Helpers e Elements

Controller
Components
CakePHP

Estrutura de Arquivos
CakePHP

Estrutura de Arquivos
config - configuração da app (banco, conf. núcleo, etc)
controllers - controles da app
locale - strings de internacionalização
models - modelos da app
plugins - pacotes de plugins
tmp - local de arquivos temporários
vendors - aplicativos de terceiros
views - views do sistema
webroot - raiz da aplicação
CakePHP

Estrutura de Arquivos
config - configuração da app (banco, conf. núcleo, etc)
controllers - controles da app
locale - strings de internacionalização
models - modelos da app
plugins - pacotes de plugins
tmp - local de arquivos temporários
vendors - aplicativos de terceiros
views - views do sistema
webroot - raiz da aplicação
Aplicação exemplo: Blog

O primeiro bolo
Aplicação de blog

Listar
Inserir
Editar
Deletar O primeiro a gente

NUNCA
esquece ...
Aplicação exemplo: Blog

Conf. base no Cake


app/config/database.php.default

app/config/database.php
Aplicação exemplo: Blog

Criando o model
Criar tabela na database escolhida
Aplicação exemplo: Blog

Criando o model
app/models/post.php
Aplicação exemplo: Blog

Convenções
MODEL
Nome da tabela SEMPRE no plural (ex.: model post -> tabela posts)

Toda tabela deve possuir a chave primária id (auto-numérica ou com 36 caracteres)

CONTROLLER
Nome SEMPRE no plural (ex.: model post -> controller posts)

Nome do arquivo no padrão <model no plural>_controller.php


Aplicação exemplo: Blog

Criando o controller
app/controllers/posts_controller.php
Aplicação exemplo: Blog

Criando uma views


app/views/posts/index.ctp - listagem dos posts
Aplicação exemplo: Blog

Criando uma views


app/views/posts/index.ctp - listagem dos posts

helper $html->link
Aplicação exemplo: Blog

Acessando a ação

http://localhost/posts
Aplicação exemplo: Blog

Acessando a ação

http://localhost/posts

host
Aplicação exemplo: Blog

Acessando a ação
controller

http://localhost/posts

host
Aplicação exemplo: Blog

Executando a ação
Aplicação exemplo: Blog

Adicionando ações
app/controllers/posts_controller.php
Aplicação exemplo: Blog

Adicionando ações
app/views/posts/view.ctp
Aplicação exemplo: Blog

Acessando a ação

http://localhost/posts/view/2
Aplicação exemplo: Blog

Acessando a ação

http://localhost/posts/view/2
host
Aplicação exemplo: Blog

Acessando a ação
controller

http://localhost/posts/view/2
host
Aplicação exemplo: Blog

Acessando a ação
controller ação

http://localhost/posts/view/2
host
Aplicação exemplo: Blog

Acessando a ação
controller ação

http://localhost/posts/view/2
host ID
Aplicação exemplo: Blog

Adicionando ações
Aplicação exemplo: Blog

Modificando o layout
Layout

View

Elements
Aplicação exemplo: Blog

Modificando o layout
Layout

View

Elements
Aplicação exemplo: Blog

Modificando o layout
Layout

View

Elements
Aplicação exemplo: Blog

Modificando o layout
Layout

View

Elements
Aplicação exemplo: Blog

Modificando o layout
Aplicação exemplo: Blog

Modificando o layout

conteúdo da view
Aplicação exemplo: Blog

Modificando o layout
Antes Depois
Aplicação exemplo: Blog

Adicionando um post
app/controllers/posts_controller.php
Aplicação exemplo: Blog

Adicionando um post
app/views/posts/add.ctp
Aplicação exemplo: Blog

Adicionando um post
app/views/posts/add.ctp

FormHelper
Aplicação exemplo: Blog

Adicionando um post
app/views/posts/index.ctp
Aplicação exemplo: Blog

Adicionando um post
app/views/posts/index.ctp
Aplicação exemplo: Blog

Adicionando um post
Aplicação exemplo: Blog

Validação de campos
app/models/post.php
Aplicação exemplo: Blog

Validação de campos
app/models/post.php

validação
Aplicação exemplo: Blog

Validação de campos
Aplicação exemplo: Blog

Validação de campos
Aplicação exemplo: Blog

Deletando um post
app/controllers/posts_controller.php
Aplicação exemplo: Blog

Deletando um post
app/views/posts/index.ctp
Aplicação exemplo: Blog

Deletando um post
app/views/posts/index.ctp

confirma a operação
Aplicação exemplo: Blog

Deletando um post
Aplicação exemplo: Blog

Editando um post
app/controllers/posts_controller.php
Aplicação exemplo: Blog

Editando um post
app/views/posts/edit.ctp
Aplicação exemplo: Blog

Editando um post
app/views/posts/edit.ctp
Aplicação exemplo: Blog

Editando um post
app/views/posts/index.ctp
Aplicação exemplo: Blog

Editando um post
app/views/posts/index.ctp

e tome helper
Aplicação exemplo: Blog

Editando um post
Extras

CRUD e Scaffolding
app/model/comment.php

app/model/comment.php
Extras

CRUD via Scaffolding


Vantagens

Desvantagens
Extras

CRUD via Scaffolding


Vantagens
Ótimo para prototipar aplicações

Desvantagens
Extras

CRUD via Scaffolding


Vantagens
Ótimo para prototipar aplicações
Pode ser usado numa app em producão

Desvantagens
Extras

CRUD via Scaffolding


Vantagens
Ótimo para prototipar aplicações
Pode ser usado numa app em producão
Mamão com açucar!!

Desvantagens
Extras

CRUD via Scaffolding


Vantagens
Ótimo para prototipar aplicações
Pode ser usado numa app em producão
Mamão com açucar!!

Desvantagens
Não foi feito para ser flexível
Extras

CRUD via Scaffolding


Vantagens
Ótimo para prototipar aplicações
Pode ser usado numa app em producão
Mamão com açucar!!

Desvantagens
Não foi feito para ser flexível
Baixa segurança (em seu estado default)
Extras

CRUD via Bake

$ cd ./cake/console
$ ./cake bake
Extras

CRUD via Bake


Vantagens

Desvantagens
Extras

CRUD via Bake


Vantagens
Cria “esqueletos” de models, views e controllers

Desvantagens
Extras

CRUD via Bake


Vantagens
Cria “esqueletos” de models, views e controllers
Ao contrário do scaffold, cria arquivos reais na app

Desvantagens
Extras

CRUD via Bake


Vantagens
Cria “esqueletos” de models, views e controllers
Ao contrário do scaffold, cria arquivos reais na app
Extremamente poderoso e funcional

Desvantagens
Extras

CRUD via Bake


Vantagens
Cria “esqueletos” de models, views e controllers
Ao contrário do scaffold, cria arquivos reais na app
Extremamente poderoso e funcional
Permite configurar os modelos

Desvantagens
Extras

CRUD via Bake


Vantagens
Cria “esqueletos” de models, views e controllers
Ao contrário do scaffold, cria arquivos reais na app
Extremamente poderoso e funcional
Permite configurar os modelos

Desvantagens
Acostuma mal! :)
Fechando o buteco

Conclusões
Fechando o buteco

Conclusões
Fácil de codificar
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Ferramentas de prototipação poderosas (bake/scaffold)
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Ferramentas de prototipação poderosas (bake/scaffold)
Arquitetura consistente e flexível
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Ferramentas de prototipação poderosas (bake/scaffold)
Arquitetura consistente e flexível
Helpers ajudam um bocado
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Ferramentas de prototipação poderosas (bake/scaffold)
Arquitetura consistente e flexível
Helpers ajudam um bocado
Codificação limpa, correta e sustentável
Fechando o buteco

Conclusões
Fácil de codificar
ORM e MVC aumentam a produtividade
Ferramentas de prototipação poderosas (bake/scaffold)
Arquitetura consistente e flexível
Helpers ajudam um bocado
Codificação limpa, correta e sustentável
Ei, isso não foi tão ruim afinal.
Fechando o buteco

Asta La Vista Baby


Léo Hackin
e-mail e MSN
leohackin@gmail.com
Skype
leohackin

Blog

www.leohackin.com.br/blog
F u i ...

Você também pode gostar