Professional Documents
Culture Documents
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
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' => '');
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