Você está na página 1de 6

Breno Oliveira Quinta-feira, 03 de maio de 2007

Utilizando o CakePHP
Olá pessoal. Hoje vamos falar sobre um framework que desperta muito interesse de alguns
desenvolvedores: o cakePHP.
Vou partir do princípio que você já tenha idéia do que seja um framework e suas vantagens. E que
tenha o mínimo conhecimento de PHP e MySQL.
Por que usar o que cakePHP?
O cakePHP é baseado no framework Ruby On Rails(RoR) e para quem já está acostumado ou quer
se acostumar a programar com o cakePHP, é ótimo. Ele também é de extrema facilidade de uso e
utiliza do termo Convention over Configuration, ou seja, convenção ao invés de configuração. Em
outros frameworks Java, temos que ficar escrevendo enormes XML de configuração de nosso
aplicativo, ao contrário do cakePHP, onde apenas vamos utilizar tarefas que faríamos normalmente,
porém baseado em algumas regras do framework.
O que preciso para começar com o cakePHP?
Primeiramente vamos fazer o download da ultima versão do cakePHP. Temos que verificar se estão
habilitados no Apache. O uso do cakePHP no servidor Apache implica no uso do mod_rewrite sob
pena de ocorrer problemas com URLs. Para liberar o mod_rewrite no Apache, basta encontrar no
arquivo httpd.conf as linhas a seguir:
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c

Então basta descomentar essas linhas. Também precisamos ver se os arquivos .htaccess podem
modificar o nosso DocumentRoot. Para verificar se está habilitado, procure pela linha: This should
be changed to whatever you set DocumentRoot to e basta adicionar o seguinte comando
AllowOverride All.
Caso você não seja o administrador do servidor, entre em contato com o suporte de sua
hospedagem.
Iniciando com o cakePHP
Se os passos acima estiverem certos, estamos prontos para começa a programar. Descompacte o
cakePHP e coloque no seu DocumentRoot.
Ao abrir a pasta do cakePHP, observamos diversos diretórios. Para o momento os diretórios que
mais nos interessam são:
• App: aqui vai ficar toda nossa aplicação MVC, imagens, etc ..
• cake: aqui fica o core do cakePHP. Fica em um diretório a parte pois assim podemos
atualizar a versão do cakePHP sem interferir em nossa aplicação.
Ainda no diretório App temos :
• Config: Arquivos de configuração de nosso aplicativo.
• Controllers: aqui ficaram nossos controllers.
• Models: aqui ficaram nossos models.
• views: aqui ficaram nossos views.
• webroot: aqui ficaram html's, imagens, swf, css, javascript e etc.
Primeiro passo, o banco de dados
Nosso aplicativo será uma agenda, onde iremos cadastrar tarefas quaisquer.
Vamos utilizar um banco de dados MySQL para esse artigo. Então crie um banco de dados chamado
agenda (ou como você preferir).
CREATE DATABASE agenda

Feito isso vamos criar nossa tabela tarefas.


CREATE TABLE tarefas (
id INT NOT NULL AUTO_INCREMENT,
autor VARCHAR(200),
data_inicio DATETIME,
data_fim DATETIME,
tarefa VARCHAR (255),
status BOOL,
PRIMARY KEY ( id )
) TYPE=INNODB;

Atenção: como mencionei antes, o cakePHP utiliza de convenção, então é importante observar que
o nome de tabelas sempre devem estar no plural.
Agora tenha em mãos um usuário e senha que tenha acesso a esse banco de dados.
Vamos fazer uma das pequenas configurações do cakePHP, o acesso ao banco de dados. Acesse a
pasta app/config/ e você vai ver um arquivo chamado database.php.default. Renomeie esse arquivo
apenas para database.php. Ótimo agora vamos editá-lo.
Você pode observar que este arquivo tem 2 arrays: um $default e outro $test. Creio que é bem
sugestivo o preenchimento desses arrays. O Array $default é o nosso banco de dados de produção e
$test já é bem sugestivo.
array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'agenda',
'prefix' => '');

Creio que aqui não temos muitos problemas quanto a configuração.


driver: informamos qual é o nosso banco de dados(No caso MySQL).
host: Aqui informamos o endereço físico de nosso servidor MySQL(para a maioria localhost deve
funcionar).
login: Usuário com acesso ao BD.
password: Senha do usuário.
database: Nome do banco de dados de nossa aplicação.
prefix: esse é um prefixo que você pode colocar a frente de todas suas tabelas. Exemplo: quando
temos uma banco de dados com tabelas de diversas aplicações, podemos colocar esse prefixo para
nos organizar e o cakePHP vai adicionar esse prefixo a frente de todas suas consultas no banco.
Feito isso, já podemos testar nossa aplicação funcionando. No meu caso, a minha URL ficou
http://localhost/cakephp/ mas isso pode variar de acordo de como você fez. Se tudo ocorreu certo,
você vai ver a tela padrão do cakePHP. Para verificar se o cakePHP acessou corretamente o banco
de dados, ele vai exibir uma linha com os seguintes dizeres: Cake is able to connect to the
database. Caso ele não tenha conseguido acessar ao BD, verifique os itens mencionados acima.
Observação: O cakePHP é um framework MVC. Logo, para cada página nossa com acesso ao
banco de dados, vamos precisar de pelo menos 3 arquivos. O Model que vai representar a estrutura
da tabela, criar novos registros, deletar, atualizar.
Segundo passo: o Model
Agora vamos criar nosso primeiro Model:
class Tarefa extends AppModel {
var $name = "tarefa"; //para tornar o script compatível com php4
}

Então vamos aos detalhes de nossa classe:


• Todos nossos Models vão herdar a classe AppModel.
• O nome do model vai ser o nome da tabela que ele representa, porém no singular e com a
primeira letra em maiúsculo.
• E para manter compatibilidade com o PHP4 declaramos var $name onde seu valor vai ser o
mesmo do nome do Model.
• Devemos salvar dentro de app/models com o nome da classe, ficando assim tarefa.php.
De momento só vamos fazer isso em nosso Model.
Terceiro passo: o Controller
Ele que vai realizar o controle de nossas requisições para models e views. Ele vai mesclar ambos e
devolver a página para o usuário.

class TarefasController extends AppController {


var $name = "Tarefas";
}

Ele também tem algumas convenções que devemos seguir. Vamos a elas:
• O nome da classe deve ser o mesmo do model porém agora é no plural e junto com a palavra
Controller e nossa classe vai herdar AppController.
• E declaramos o var $name para manter compatibilidade com o PHP4.
• Vamos salvar esse arquivo em app/controller com nome da classe, porém tudo em minúsculo
e com um undeline antes da palavra controller, ficando assim tarefas_controller.php.
O cakePHP, assim como no Ruby On Rails, tem um item muito legal: o scaffold, que é um CRUD
(Create, Read, Update, Delete). Ou seja, operações básicas que podemos realizar em uma tabela do
banco de dados. E o melhor de tudo, é bem simples colocar o scaffold para funcionar. Ainda em
nosso controller, logo abaixo de var $name; adicione uma variável chamada var $scaffold;
Agora queremos testar nosso scaffold, então vamos entrar na URL de nosso aplicativo após a ultima
barra e adicionar o nome do controller. No meu caso ficou http://localhost/cakephp/tarefas/
Se estiver tudo certinho, você verá nosso scaffold. Você pode realizar operações CRUD. Tudo isso
em poucas linhas de código.
Sem dúvidas o scaffold é um método impressionante e por isso vamos mesclar em templates nossos.
Vamos utilizar o scaffold para editar, deletar e visualizar somente uma tarefa. E para listar todas as
tarefas, vamos montar nossa própria view.
Antes de continuarmos, vamos entender como nosso controler vai entender nossa URL.
http://localhost/cakephp/tarefas/listar/1
cakephp: esse é o nome do diretório onde está nossa aplicação.
tarefas: esse é nome de nosso controller, mas só não adicionamos a palavra controller
listar: esse é nome do método que estamos chamando dentro de tarefas_controller.php
1: são parâmetros que passamos para nosso método listar.
Todos os nossos controller vão precisar de uma função com um nome em comum que é index. Essa
é uma função que vai ser chamada caso não passamos o nome do método que queremos chamar.
Geralmente redirecionamos para uma função da controller e no nosso caso vamos redirecionar para
o listar.
function index() {
$this->redirect('/tarefas/listar');
}

Ainda no controller vamos criar uma function chamada listar, irá listar todas nossas tarefas.

function listar() {
// coloca um titulo em nossa página, ou seja passa para o template a variável
title
$this->set('title', 'Listar');
//aqui vamos buscar todos nossos registros no banco de dados
$tarefas = $this->Tarefa->findAll();
//Aqui estamos enviando para o template os registros encontrados.
$this->set('tarefas', $tarefas);
}

No código acima, buscamos todas as tarefas. Observe que invocamos um método de nosso Model
que nem ao menos criamos findAll, mas esse método está no pacote AppModel que nossa classe
Tarefa herdou. Então chamamos esse método sem precisar criar nada. E então adicionamos as
variáveis em nosso template.
Se você executar seu código nesse momento, você vai ver que o cakePHP acusou de faltar view
listar.thtml
Terceiro passo: a view
Antes de mais nada, vamos entender como o cakePHP vai funcionar em relação a view.
O cakePHP vai procurar por um diretório chamado tarefas dentro de views, pois para ele, tudo que
for referente a tarefas, estará nesse diretório. E cada método vai ter ter um arquivo .thtml que terá o
mesmo nome que o método. Exemplo: dentro de views, vamos precisar de um arquivo chamado
listar.thtml. Se tivéssemos um método do TarefasController chamado olho, vamos precisar de uma
view chamada olho.thtml.
Então vamos ao html de nosso arquivo listar.thtml:
<h1>Lista de Tarefas</h1>
<table width="100%" cellspacing="0" cellpadding="0">
<tr bgcolor="#F0F0F0">
<td>Autor</td>
<td>Data Inicio</td>
<td>Data Fim</td>
<td>Tarefa</td>
<td>Status</td>
<td>Operações</td>
</tr>
<?php foreach ( $tarefas as $tarefa ): ?>
<tr>
<td><?=$tarefa['Tarefa']['autor']?></td>
<td><?=$tarefa['Tarefa']['data_inicio']?></td>
<td><?=$tarefa['Tarefa']['data_fim']?></td>
<td><?=$tarefa['Tarefa']['tarefa']?></td>
<td><?=$tarefa['Tarefa']['status']?></td>
<td>
<?=$html->link('Visualizar', '/tarefas/view/'.$tarefa['Tarefa']
['id'])?>
<?=$html->link('Editar', '/tarefas/edit/'.$tarefa['Tarefa']
['id'])?>
<?=$html->link('Deletar', '/tarefas/delete/'.$tarefa['Tarefa']
['id'])?>
</td>
</tr>
<?php endforeach; ?>

Bom, o que fizemos foi bem simples. Se antes de executar esse código você der um print_r
($tarefas), você vai ver o array que temos. Então o primeiro indice é númerico, e depois teremos
uma outra chave onde é o nome de nosso model e depois o nome dos campos.
E por último utilizamos a html do cakePHP para gerar nossos links. Se você acessar nossa aplicação
e testar editar, deletar e visualizar os dados, você verá que funciona tudo certinho. Isso porque
deixamos o scaffold ativo. Só apenas criamos links para seus métodos.
O scaffold é excelente para gerenciar backend's pois é de extrema produtividade.
No momento já temos uma aplicação inteira funcionando, mas ainda não deixamos ela
completamente com a nossa cara, ou seja, nossas views são adicionadas dentro de um template
padrão do cakePHP, mas podemos montar o THTML do esqueleto de nosso site. Então vamos ao
nosso thtml:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Tarefas - <?php echo $title_for_layout; ?></title>
</head>
<body>
<div id="header">
<h1>Tarefas</h1>
</div>
<div id="content">
<?=$content_for_layout;?>
</div>
</body>
</html>

As variáveis tem nomes bem sugestivos, ou seja, $content_for_layout é onde o conteúdo da view
vai ser incluído. Agora salve o arquivo em app/views/layouts com o nome de default.thtml e seu site
vai ter sua cara.
Conclusão
Por hora vamos ficar por aqui. No próximo artigo vamos entrar mais a fundo no framework. Espero
que tenham gostado do artigo e que tenham despertado uma atenção para o framework do cakePHP.
Mesmo com o framework da zend e entre tantos outros framework's.
O que quero, com esse artigo, é deixar a porta aberta para mais um framework, ou até mesmo uma
metodologia de trabalho.
Links
http://manual.cakephp.org/
http://www.cakephp.com.br/modules/news/
Acesse também o blog da ViperTech.com.br