Cake
PHP, instalação/configuração e exemplo
(Hugo Vinícius Alves Soares http://hvasoares.wordpress.com )
O
primeiro passo para é fazer o download do Cake PHP, entre em
www.cakephp.org
e clique no link de download, a versão utilizada nesse
tutorial é a versão 1.2.1.8004 stable.
Depois
entre no arquivo de configuração do Apache (estou
utilizando o Apache 2.2 httpd.conf), nesse arquivo remova o
comentário da seguinte linha:
E
procure por:
Troque
o argumento “AllowOverride none” por “AllowOverride
all”. Essas configurações são necessárias
para o CakePHP pois ele faz escrita de URLs, mais na frente daremos
um exemplo.
Descompacte
o arquivo do CakePHP na pasta raiz do Apache, renomeia para
“taskViewer”, no seu navegador vá para
http://localhost/taskViewer
se você tiver configurado certo verá a tela abaixo.
Dentro
da pasta você encontrar os seguintes arquivos:
-
app
-
cake
-
vendors
-
index.php
-
.htaccess
-
README
Por
hora nossas atenções para a pasta app, nessa pasta é
onde nossa aplicação residirá. Dentro dela por
hora nos interessaremos por quatro pastas:
-
config:
configurações do cake, utilizaremos para configurar o
banco de dados -
controllers:
pasta contendo controladores interligam os models com as views; -
models:
pasta contendo classes que representam tabelas no banco de dados -
views:
pasta contendo a interface gráfica de nossa aplicação.
Dentro
de config renomeio o arquivo database.php.default para database.php,
abra o ponha o seguinte conteúdo:
No
seu banco de dados crie as seguintes tabelas:
Vocês
devem ter percebido que utilizei os nomes das tabelas em inglês,
o CakePHP faz o mapeamento entre classes e tabela utilizando regras
de pluralização do inglês: a tabela “users”
terá um classe chamada “User”, “tasks”
terá uma classe “Task”. Dentro da pasta app/model
vamos criar um arquivo chamado user.php com o seguinte conteúdo:
A
propriedade “name” é criada por motivos de
compatibilidade com o PHP4, “hasMany” nos indica que um
usuário pode ter muitos posts, como isso foi feito? Observe o
script para criação de tabelas, na tabela posts há
uma coluna user_id, essa tabela relaciona posts a users, é um
padrão do Cake: para referenciar outros tabelas devemos usar o
nome no singular mais undescore mais id.
A
propriedade “belongsTo” faz com que Task pertenca a User.
O framework tratará de resgatar informações do
usuário relacionado a Task automaticamente, e o contrário
é verdadeiro, User terá acesso automático às
Tasks.
Agora
criaremos um controlador, um controlador, como foi dito antes, é
responsável por unir o modelo à visão. Para
criaremos o controlador TasksController no arquivo
app/controller/task_controller.php:
TasksController
é associado ao modelo Task, nome do controlador no plural
associa a um modelo no singular. O vetor helpers nos informar quais
componentes o framework vai nos fornecer para passarmos a visão,
há outros helpers como Form, Javascript e etc, os helpers são
injetados no controlador de maneira implícita ao programador.
O
método index corresponde a uma ação do
controlador, uma ação pode ou não ter uma visão
associada. Observem bem: dentro desse método existe uma
variável que recebe todos os objetos Task do banco de dados, a
classe Task fornece vários métodos implícitos
para buscar, deletar e excluir objetos do banco de dados. Como
TasksController está associado a Task então o Cake PHP
injeta um objeto da classe Task no controlador de forma automática.
O
método “find(‘all’)” retorna uma lista contendo
todos os objetos guardados no banco.
O
método “set” é a forma que temos de enviar
um dado para a camada de visão, a função compact
informa que a variável “tasks” deve ser levada
para a visão. Falando na visão crie uma pasta chamada
“Tasks” (o nome do controlador) dentro de app/view, todas
as visões que são associadas a ações de
controladores precisam ser criadas dentro da pasta
app/view/nome_do_controlador. Criemos o arquivo
app/view/tasks/index.ctp , dentro dele vamos por o código
abaixo:
Perceba
que não criamos uma página completa e sim um fragmento,
entre em http://localhost/taskViewer/tasks
. Como temos uma ação index então a view para
esse ação é carregada. A mensagem “There
is no task registred” será exibida, vamos inserir dois
registros no banco de dados:
Se
formos novamente no endereço acima, veremos uma listagem
contendo o nome do usuário mais a tarefa a ele atribuída.
Mas do que adianta termos como exibir as tarefas mas não
podermos adicioná-las. Precisamos criar uma nova ação
em TasksController chamada “add”, vamos dar uma olhada em
como vai ficar nossa classe favorita:
A
primeira mudança que vemos aqui é que adicionamos um
outro helper: Form ele vai ajudar-nos a criar o formulário
para cadastro de uma nova Task. O método add é o nosso
foco agora, a primeira coisa é sabermos se os dados enviados
para a ação está vazio ou não. Se não
estiver, então criamos uma nova task com
“$this->Task->create()” e depois salvamos com
“$this->Task->save(‘$this->data)”, se tudo der
certo enviamos uma mensagem para usuário através de
$this->Session->setFlash(), essa messagem será mostrada
na próxima tela redenrizada. Como a operação foi
bem sucedida nós redirecionamos para a ação
‘index’ do controlador. Se não conseguirmos salva então
uma mensagem é exibida e ficaremos na mesma tela.
A
outra parte do método e muito importante é a qual
criamos uma lista de usuários utilizando o método find.
Todos os objetos da classe Task têm acesso a um objeto User,
utilizamos o método find com o argumento “list”
esse argumento retorna um array que pode ser utilizado para criação
de combo box (veremos adiante), nesse mesmo método dizemos que
queremos o campo ‘name’ para ser retornado. No fim do método
mandamos para a visão a variável “users”.
Crie
o arquivo em app/views/tasks/add.ctp, e escreva:
Nessa
view utilizamos o helper “form” , o primeiro método
é o create(), ele inicia um formulário, o método
input tem como argumento o campo do modelo. Vamos dar uma olhada em
http://localhost/taskViewer/tasks/add.
Você
percebeu que o framework criou um combo box para “user_id”
ele foi alimentado através da variável “users”
que enviamos à visão, o CakePHP cria o campo por seu
formulário de acordo com o tipo dele.
Abaixo
uma mudança em app/view/tasks/index.ctp :
Bem,
arqui criamos um link que vai nos levar a ação add de
TasksController. E adicionamos um css à nossa página, o
argumento false, nos diz que o css deve ser declarado na tag head da
página. Existe uma pasta chamada app/webroot/ nessa podemos
por arquivos css, javascripts que vão ser utilizados pela
aplicação. E agora, o arquivo
app/webroot/tasksController.index.css :
Bem
entrando novamente na página já veremos os efeitos do
novo css:
Chegamos
agora ao final do nosso tutorial. É um tutorial bem básico,
não tocamos nem 1% do que o Cake pode fazer por nós.
Mas aqui estão algumas coisas que você podem dar uma
pesquisada:
-
Cake
console -
Criação
de Controllers com mais de um modelo associado -
Criação
de Controllers com nenhum modelo associado -
Array
de opções para $form->input()