Anda di halaman 1dari 8

Utilizando o CakePHP

Quinta-feira, 03/05/2007 s 10h22, por Breno Oliveira

Ol pessoal. Hoje vamos falar sobre um framework que desperta muito interesse de alguns desenvolvedores: o cakePHP. Vou partir do princpio que voc j tenha idia do que seja um framework e suas vantagens. E que tenha o mnimo 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 tambm de extrema facilidade de uso e utiliza do termo Convention over Configuration, ou seja, conveno ao invs de configurao. Em outros frameworks Java, temos que ficar escrevendo enormes XML de configurao de nosso aplicativo, ao contrrio do cakePHP, onde apenas vamos utilizar tarefas que faramos normalmente, porm baseado em algumas regras do framework. O que preciso para comear com o cakePHP? Primeiramente vamos fazer o download da ultima verso do cakePHP. Temos que verificar se esto 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.soAddModule mod_rewrite.c


Ento basta descomentar essas linhas. Tambm 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 no 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 comea a programar. Descompacte o cakePHP e coloque no seu DocumentRoot. Ao abrir a pasta do cakePHP, observamos diversos diretrios. Para o momento os diretrios que mais nos interessam so: App: aqui vai ficar toda nossa aplicao MVC, imagens, etc ..

cake: aqui fica o core do cakePHP. Fica em um diretrio a parte pois assim podemos atualizar a verso do cakePHP sem interferir em nossa aplicao.

Ainda no diretrio App temos :


Config: Arquivos de configurao 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. Ento 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;

Ateno: como mencionei antes, o cakePHP utiliza de conveno, ento importante observar que o nome de tabelas sempre devem estar no plural. Agora tenha em mos um usurio e senha que tenha acesso a esse banco de dados. Vamos fazer uma das pequenas configuraes 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 produo e $test j bem sugestivo.
array('driver' => 'mysql', 'connect' => 'mysql_connect', 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'agenda', 'prefix' => '');

Creio que aqui no temos muitos problemas quanto a configurao. driver: informamos qual o nosso banco de dados(No caso MySQL). host: Aqui informamos o endereo fsico de nosso servidor MySQL(para a maioria localhost deve funcionar). login: Usurio com acesso ao BD. password: Senha do usurio. database: Nome do banco de dados de nossa aplicao. 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 aplicaes, 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 aplicao 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 padro 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 no tenha conseguido acessar ao BD, verifique os itens mencionados acima. Observao: O cakePHP um framework MVC. Logo, para cada pgina 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 compatvel com php4 }

Ento vamos aos detalhes de nossa classe:


Todos nossos Models vo herdar a classe AppModel.

O nome do model vai ser o nome da tabela que ele representa, porm no singular e com a primeira letra em maisculo. 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 requisies para models e views. Ele vai mesclar ambos e devolver a pgina para o usurio.
class TarefasController extends AppController { var $name = "Tarefas"; }

Ele tambm tem algumas convenes que devemos seguir. Vamos a elas: O nome da classe deve ser o mesmo do model porm 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, porm tudo em minsculo 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, operaes bsicas 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 varivel chamada var $scaffold; Agora queremos testar nosso scaffold, ento vamos entrar na URL de nosso aplicativo aps 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 operaes CRUD. Tudo isso em poucas linhas de cdigo. Sem dvidas o scaffold um mtodo 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 prpria view. Antes de continuarmos, vamos entender como nosso controler vai entender nossa URL. http://localhost/cakephp/tarefas/listar/1 cakephp: esse o nome do diretrio onde est nossa aplicao. tarefas: esse nome de nosso controller, mas s no adicionamos a palavra controller listar: esse nome do mtodo que estamos chamando dentro de tarefas_controller.php 1: so parmetros que passamos para nosso mtodo listar. Todos os nossos controller vo precisar de uma funo com um nome em comum que index. Essa uma funo que vai ser chamada caso no passamos o nome do mtodo que queremos chamar. Geralmente redirecionamos para uma funo 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 pgina, ou seja passa para o template a varivel 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 cdigo acima, buscamos todas as tarefas. Observe que invocamos um mtodo de nosso Model que nem ao menos criamos findAll, mas esse mtodo est no pacote AppModel que nossa classe Tarefa herdou. Ento chamamos esse mtodo sem precisar criar nada. E ento adicionamos as variveis em nosso template. Se voc executar seu cdigo 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 relao a view. O cakePHP vai procurar por um diretrio chamado tarefas dentro de views, pois para ele, tudo que for referente a tarefas, estar nesse diretrio. E cada mtodo vai ter ter um arquivo .thtml que ter o mesmo nome que o mtodo. Exemplo: dentro de views, vamos precisar de um arquivo chamado listar.thtml. Se tivssemos um mtodo do TarefasController chamadoolho, vamos precisar de uma view chamada olho.thtml. Ento 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>Operaes</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 cdigo voc der um print_r ($tarefas), voc vai ver o array que temos. Ento o primeiro indice nmerico, 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 aplicao 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 mtodos. O scaffold excelente para gerenciar backend's pois de extrema produtividade. No momento j temos uma aplicao inteira funcionando, mas ainda no deixamos ela completamente com a nossa cara, ou seja, nossas views so adicionadas dentro de um template padro do cakePHP, mas podemos montar o THTML do esqueleto de nosso site. Ento 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 variveis tem nomes bem sugestivos, ou seja, $content_for_layout onde o contedo da view vai ser includo. Agora salve o arquivo em app/views/layouts com o nome de default.thtml e seu site vai ter sua cara. Concluso Por hora vamos ficar por aqui. No prximo artigo vamos entrar mais a fundo no framework. Espero que tenham gostado do artigo e que tenham despertado uma ateno 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.

Anda mungkin juga menyukai