CakePHP. Para quem já conhece não é necessário falar mais nada, pois já sabem de tudo que esse framework é capaz de fazer. E pra quem não conhece, já passou da hora de conhecer!

Pense em um mundo em que todos os seus sonhos se tornam realidade (ou quase isso). Um mundo onde você consegue criar um sistema com Cadastro, Visualização, Edição e Exclusão (o famoso CRUD) editando apenas algumas dezenas de linhas de código. Sim, eu disse dezenas e não centenas, nem milhares. Bom, agora isso já não é mais um sonho: isso é o CakePHP!

CakePHP: the rapid development PHP framework

Já vou avisando que as funcionalidades que o CakePHP oferece para realizar essa magia podem não ser adequadas para um sistema em produção, pois não permitem muitas opções de configuração e controle sobre o que pode ou não ser feito no sistema. (mas para algum trabalho de faculdade que você deixou para última hora não tem nenhum problema ;-) )

Antes de continuar, verifique se você possui um servidor web com suporte a PHP habilitado e configurado (recomendo o Apache, por ser o mais fácil de configurar para funcionar com o CakePHP), e um banco de dados, que pode ser MySQL (ou MariaDB), PostgreSQL ou SQLite (eu vou utilizar o MariaDB nesse exemplo). Para começar a utilizar o CakePHP, é necessário fazer o download da última versão do site oficial e descompactar o pacote dentro de algum diretório acessível publicamente no servidor (por exemplo html, htdocs, public_html, …). Esse é o modo de instalação mais simples do CakePHP, mas existem outros!

O CakePHP é dividido em vários subdiretórios, e saber para que serve cada um deles (ou pelo menos os principais) é essencial:

  • app – o diretório onde a sua aplicação deve ser desenvolvida
    • Config – configurações do CakePHP (banco de dados, URLs, …)
    • Console – espaço para você desenvolver ferramentas de linha de comando utilizando PHP (para automatizar tarefas, etc.)
    • Controller – responsável por receber as requisições e controlar Model e View
    • Lib – bibliotecas próprias (que você mesmo desenvolveu)
    • Locale – suporte a internacionalização/localização (i18n/l10n)
    • Model – modelo de dados e acesso ao banco
    • Plugin – se você quiser aderir ao “desenvolvimento orientado a plugins”…
    • Vendor – bibliotecas de terceiros (separadas das suas bibliotecas, que ficam em Lib)
    • View – criação dos layouts e views
    • webroot – conteúdo estático (imagens, scripts, CSS, …)
  • lib – o diretório onde a magia do CakePHP é feita

Para configurar o CakePHP, basta acessá-lo pelo navegador e verificar se está tudo funcionando. Caso alguma coisa não esteja certa, você verá uma mensagem de erro indicando qual é o problema e como resolver (por exemplo, alterar os valores de Security.salt e Security.cipherSeed nos arquivos de configuração). No final, todas as mensagens devem estar OK (em verde), exceto o aviso sobre o DebugKit, que é opcional. (A configuração do banco de dados veremos a seguir…)

Para esse exemplo eu vou desenvolver uma simples lista de tarefas (TODOs). Faça sua aposta: quantas linhas de código serão necessárias para criar isso?

Criação do banco de dados

Começando pelo começo, é bom criar o banco de dados antes de mexer no código. A ideia é simples, e o banco de dados também:

-- O nome das tabelas e dos campos é importante!
CREATE TABLE task_statuses
(
    id   INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
    name VARCHAR(100)        NOT NULL
);

CREATE TABLE tasks
(
    id             INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
    title          VARCHAR(200)        NOT NULL,
    notes          TEXT,
    task_status_id INTEGER REFERENCES task_statuses(id)
);

Acho que esses scripts são auto-explicativos. De qualquer forma, nosso sistema terá tarefas com título, anotações e status, sendo que o status é configurável (o usuário pode cadastrar, alterar, excluir, …).

Programação

Se você é daqueles que já abriu uma IDE antes mesmo dessa página terminar de carregar, fique sabendo que talvez a IDE seja desnecessária dessa vez ;-)

A primeira coisa a ser feita é configurar a conexão com o banco de dados. Para isso, renomeie o arquivo database.php.default que está no diretório (cakephp)/app/Config para database.php. Agora é só abrir o arquivo e alterar as informações da conexão $default. Provavelmente as únicas modificações necessárias serão o login, a senha e o nome do banco, dependendo do seu banco de dados.

Agora sim vamos ao código. Vamos começar editando os Models da aplicação. Pronto, terminamos. Ou melhor, o CakePHP já fez isso para nós :D . Agora que temos os Models prontos, é hora de fazer as Views. Feito. O CakePHP já fez isso também (é claro que deixou com o estilo e layout dele, mas isso não é assunto desse post).

Agora nós começamos a fazer a parte mais complexa: os Controllers. Como temos duas tabelas no banco, vamos criar dois controllers: TaskStatusController e TasksController. Preste muita atenção no código a seguir pois ele é praticamente impossível de entender:

<?php
class TaskStatusesController extends AppController {
    public $scaffold;
}
<?php
class TasksController extends AppController {
    public $scaffold;
}

Como eu disse, é praticamente impossível entender como um código tão curto gera tantas funcionalidades! ;-)

Para não perder as contas, até agora o número de linhas editadas foi: 3 (configuração) + 4 + 4 (2 controllers) = 11 linhas de código. E o que foi feito com essas 11 linhas? Acesse o controller de status das tarefas e veja (por exemplo, http://localhost/tasks/task_statuses). Crie alguns status, altere um deles, exclua outro… tudo FUNCIONA!

Acessando task_statuses

Agora você está se perguntando: “de onde saiu tudo isso?”. Lembra de antes, quando eu mencionei que o CakePHP fazia mágica? Pois então…

Na verdade nós apenas utilizamos as convenções do CakePHP:

  • nomes das tabelas no plural e separados por sublinhados (tasks, task_statuses)
  • nome dos campos com chaves estrangeiras no formato “(nome da tabela referenciada no singular)_(nome do campo referenciado)”
  • nomes dos controller igual ao nome da tabela, mas convertido para CamelCase e com Controller no final (TasksController, TaskStatusesController)
  • Controllers são acessados a partir da raiz da aplicação (por exemplo, http://localhost/) com o nome da tabela (http://localhost/tasks, http://localhost/task_statuses)

Em resumo é isso. Agora, se você é esperto, já acessou o controller de tarefas (tasks) e percebeu que temos um problema! O CakePHP não sabe da associação entre as tabelas tasks e task_statuses, e ele gerou um Model utilizando o campo task_status_id como um número qualquer!

Para resolver isso precisamos editar os Models. E o que isso significa? Centenas de linhas de código? Vamos ver…

<?php
class TaskStatus extends AppModel {
    public $hasMany = 'Task'; // Um TaskStatus tem muitas Task
}
<?php
class Task extends AppModel {
    public $belongsTo = 'TaskStatus'; // Uma Task pertece a um TaskStatus
}

E agora, com a mágica do CakePHP e um total de 19 linhas de código, tudo simplesmente funciona!!

View Task StatusEdit TaskView Task

Com as tags → 
Plataforma Wordpress Latest (GPLv2)
Tema PageLines Lite Improved (GPLv3)
Hospedado por OpenShift by RedHat
Domínio registrado pela Neep Host
Creative Commons Attribution-ShareAlike License
Copyleft © 2016 Eduardo Weiland
Utilize um leitor de QR Code para acessar o blog no seu celular:
21
%d blogueiros gostam disto: