Hvasoares’s Blog

02/10/2009

Tutorial Cake PHP

Filed under: português — Tags:, , — hvasoares @ 5:00 pm

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()

02/09/2009

Hello world!

Filed under: Uncategorized — Tags: — hvasoares @ 11:31 pm

The first post, man!

Tema: WordPress Classic. Blog no WordPress.com.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.