Essa semana saiu a versão stable do CakePHP 2.0 e muita coisa ainda está por vir.
Resolvi escrever esse post para ajudá-lo a atualizar sua aplicação, mas antes vamos para algumas perguntas e pontos que as pessoas levantaram nas listas e grupos ligados ao CakePHP.
Recomendo muito a leitura do guia de migração, lá na documentação oficial do CakePHP 2.0.
“Atualizar ou não atualizar?”, eis a questão
Recomendo fortemente que você atualize suas aplicações que atualmente rodam em CakePHP 1.3, ainda mais se elas seguirem os padrões do Cake e você não mudou nada no core.
A nova versão traz inúmeras melhorias, otimizações e padronizações… O CakePHP em si tá mais rápido e leve, usando recusos nativos da linguagem e usando LazyLoad (só carrega quando for usar) em vários pontos da aplicação.
Não é melhor deixar tudo do jeito que tá e começar do zero?
Estou trabalhando no novo site do meu curso online de CakePHP - Assando Sites - que começou sendo criado na versão 1.3 mas ontem parei para atualizá-lo pra versão 2.0, fui lendo a documentação e fazendo os ajustes… demorei menos de 1 hora e não usei scripts prontos.
O que mudou na versão nova?
Recomendo que você leia essa página na documentação oficial:
http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-0.html
Atualizando seu projeto
Na minha opinião, o trabalho de atualizar/migrar o projeto para a nova versão foi bem tranquilo… diria que muito pouca coisa de código mudou (exceto arquivos que já vêm no APP como config, database, index.php e etc.). A maior mudança - na minha opinião - foi a estrutura de pastas e nomenclatura de arquivos.
Primeiro Passo - Reestruturando as pastas
O primeiro passo será renomear praticamente todas as pastas do seu projeto (APP)… As únicas pastas que não mudam de nome são a tmp e a webroot.
O resto das pastas têm o nome alterado para CamelCase no singular… exceto em alguns casos dentro da View (elements, errors e pastas de views para controllers [pastas que você criou]).
Antes
- ../config/
- .
- ../controllers/
- ../controllers/components/
- ../libs/
- ../locale/
- ../models/
- ../models/behaviors/
- ../models/datasources/
- ../plugins/
- ../tests/
- ../tmp/
- ../vendors/
- ../views/
- ../views/elements/
- ../views/elements/emails/
- ../views/errors/
- ../views/helpers/
- ../views/layouts/
- ../views/pages/
- ../views/scaffolds/
- ../webroot/
Depois
- ../Config/
- ../Console/ (nova)
- ../Controller/
- ../Controller/Component/
- ../Lib/
- ../Locale/
- ../Model/
- ../Model/Behavior/
- ../Model/Datasource/
- ../Plugin/
- ../Test/
- ../tmp/
- ../Vendor/
- ../View/
- ../View/Elements/
- ../View/Emails/ (movida)
- ../View/Errors/
- ../View/Helper/
- ../View/Layouts/
- ../View/Pages/
- ../View/Scaffolds/
- ../webroot/
Surge também uma pasta nova chamada Console que irá te ajudar a realizar tarefas de console/shell direto de dentro do seu projeto… Essa pasta você pode tirar de dentro do APP do CakePHP 2.0 que você baixar. ;)
Segundo Passo - Renomeando os arquivos
Agora vem uma parte um pouco mais complicada mas que vai garantir uma padronização para todo o seu projeto… O nome de um arquivo é exatamente o nome da classe que ele contém!
Veja alguns exemplos:
Antes
- controllers/noticias_controller.php
- controllers/components/loja.php
- models/produto.php
- views/helpers/loja_helper.php
Depois
- Controller/NoticiasController.php
- Controller/Component/LojaComponent.php
- Model/Produto.php
- View/Helper/LojaHelper.php
Alguns arquivos mudam de lugar:
Antes
- app_controller.php
- app_model.php
- app_helper.php
Depois
- Controller/AppController.php
- Model/AppModel.php
- View/Helper/AppHelper.php
Terceiro Passo - Arquivos de configuração
Recomendo que você copie os arquivos config/core.php
, config/database.php
e webroot/index.php
da nova versão do CakePHP e substitua os da sua aplicação… vários detalhes mudaram e é mais fácil reescrever qualquer configuração do que tentar fazer um diff e mudar só que há de novo.
Quarto Passo - Internacionalização / i18n
Agora as funções de internacionalização/tradução como __()
e __d()
vão sempre retornar o texto, sem imprimí-lo como era o padrão.
Antes
- __('Olá Mundo')
- $texto = __('Olá Mundo', true)
Depois
- echo __('Olá Mundo')
- $texto = __('Olá Mundo')
Quinto Passo - Funções removidas
O CakePHP vinha com várias funções-atalho que serviam pra reduzir o tamanho do código mas acabavam sendo um caminho mais longo para funções e métodos built-in do próprio PHP… Algumas dessas funções eram e()
, r()
, low()
, params()
e várias outras que foram removidas.
Veja uma lista dessas funções (e suas alternativas) aqui:
http://book.cakephp.org/2.0/en/appendices/2-0-migration-guide.html#basics-php
Finalizando
Agora você já pode começar a tentar rodar o seu projeto e ir resolvendo qualquer problema que apareça…
Essas não são TODAS as mudanças que você precisará fazer no seu projeto, mas isso já cuida de grande parte das mudanças… Agora você precisará fazer ajustes e em alguns de seus components, RequestHandler e etc… Vale muito a pena ler o guia de migração.
Um grande abraço e espero que tenham gostado! :)
Quer aprender CakePHP, já com todas as vantagens da versão 2.0, sem sair de casa?
Inscreva-se no meu curso online de CakePHP, o Assando Sites! As próximas turmas já serão feitas utilizando o CakePHP 2.0 como padrão!
As aulas são ao-vivo e você aprende sem sair de casa, aos domingos ou quando preferir assistir os vídeos gravados em aula.
Para saber mais informações sobre o curso, este post aqui no blog.