CakePHP 2.0
  Irá abalar o seu mundo!




    Felipe Vargas Rigo - NTI – UFMS

        Baseado nos slides de Graham Weldon
Cake ?
The Cake Is A Lie!
Ops…
O que ? MVC !
CakePHP√

  2.0 ?
Suporte ao
  PHP
  Adios PHP 4
Suporte ao PHP

Abandonado o suporte a PHP 4


Suportando PHP 5.2.6 e superior
 Depois.. PHP 5.3 e superior
Atalhos
Removidos:              array_combine()
e() => echo             cache() => Cache
a() => array            array_diff_key()
aa() => assoc array     array_intersect_key()
r() => str_replace      http_build_query()
ife() => if / ternary   getMicrotime()
params()                r() => str_replace
up() => strtoupper      $TIME_START
low() => strtolower
file_put_contents()     Constante PHP5
uses() => App
Teste de Unidade
   Sai o SimpleTest
   Entra o PHPUnit
Teste de Unidade
 Indiscutivelmente uma das maiores mudanças
 PHPUnit
  Prove um melhor suporte ao PHP 5 do que o
  SimpleTest
  Mantido mais ativamente
  Fácil de integrar com o CruiseControl
  Padrão para Testes de Unidade no PHP
 Instala junto com o PEAR
 Mais rápido
Teste de Unidade
 Mais poderoso
 Mais legal
 Mais? http://phpunit.de
 startTest() e endTest() serão descontinuados
 (deprecated)
Teste de Unidade
 Asserções ligeiramente diferente
 Fornecido compatibilidade com código antigo


 Exemplo:
 $this->assertEqual
 Agora:
 $this->assertEquals
Teste de Unidade
 Não existem mais grupos de testes
  Mas há um modo de fazer isso com PHP Unit
Coleções
  Organizando
Coleções

Behaviors (Comportamentos)
Components (Componentes)
Helpers (Ajudantes)
Shells (Linha de comando)
Componentes
Componentes
Componentes
A classe base Component agora é obrigatória
para todos componentes
Deve-se atualizar os componentes e seus
construtores, já que os 2 mudaram
Ficou mais intuitivo
Menor necessidade de procurar por
documentação
SPL
Usado onde foi possível
SPL
Standard PHP Library – Biblioteca padrão PHP
Fornece interações com Arquivos e Pastas
Possui Classes legais para muitas coisas
Não é necessário reimplementar no núcleo
O CakePHP 1.x estava a frente do seu tempo
O PHP o alcançou
Hora de cortar a gordura
Não-SPL

Novamente, não reinvente a roda
Removido código duplicado como codificação
JSON
Agora pode contar com a funcionalidade
fornecida com o PHP
Exceções
Exceções

O uso de exceções para indicar erros no núcleo
Mais fácil de controlar
Mais “OO”
Removido o cakeError
Exceções
Crie manipuladores personalizados para cada
exceção
Controle o que acontece após a exceção


Exemplo:
MediaView
Se arquivo não encontrado:
 Trate de maneira inteligente
Request
Response
Refatorando, centralizando.
Request / Response

 O Request representa uma requisição chegando
 Ele substitui funcionalidades antes incluidas em
 Controller, Dispatcher, RequestHandler e
 $this->params
 Implementação do ArrayAccess para manter
 compatibilidade com versões anteriores
Request / Response

 Protege usuários deles mesmos
 Protege desenvolvedores dos usuários
 Protege desenvolvedores da estupidez
 Encapsula tanto a requisição quanto a resposta
 de maneira a fornecer um local central para lidar
 com eles, porém mantendo uma flexibilidade
Sessões
Sessões
Removido código duplicado (DRY)
Não deveria ser sempre incluida (1.3 fix)
Manipulação de dados pelo Modelo
Acessível de qualquer lugar
Permite personalização de maneira simples
Separado o Caching, Database, etc.
Sessões
           SessionHandler


Database       Cache        PHP
Sessões
           SessionHandler


Database       Cache        PHP
Sessões
           SessionHandler


Database         Cache           PHP


           Seu Mecanismo Louco
Sessões
           SessionHandler


Database         Cache                PHP
                                   Interface
                                 que manipula
           Seu Mecanismo Louco     a Sessão
                                   do Cake
Peraí!
Isso parece familiar
Javascript (v1.3)
         JavascriptHelper


jQuery       Prototype      Mootools
Javascript (v1.3)
         JavascriptHelper


jQuery       Prototype      Mootools
Javascript (v1.3)
         JavascriptHelper


jQuery        Prototype        Mootools


         Seu Super Mecanismo
Javascript (v1.3)
         JavascriptHelper


jQuery        Prototype          Mootools


         Seu Super Mecanismo

            JsBaseEngineHelper
Carregamento
   Tardio
Carregamento Tardio
  Objetos aninhados (alguns deles)
   Componentes
   Ajudantes (Helpers)
   Tarefas (Tasks)
   Fixtures
  Otimização barata
  Carrega apenas quando você precisa
XML
Faze-lo faz sentido!
XML
Até onde fazer XML faz sentido..
.. foi feito
XML no 1.x era muito particular do CakePHP
Não era fácil integrar
Não tratava corretamente os namespaces
Não permitia nós ordenados


Construido sobre o SimpleXML
Máis Rápido
Genérico
Console
O shell se tornou mais popular
do que planejado inicialmente
Console
Ajuda na geração facilitada
  Melhor para usuários de plugins, assim como
  seus desenvolvedores
Texto do console colorido (ui!)
  Fácil identificação de ocorrências e erros
Suporte a saída “verbosa”
Os Shells estão sendo usados:
  reestruturado: app/console/
  Movido de: app/vendors/
Permite melhor configuração do caminho do
console
Visões
Habilitando maior controle de
  plugins, e reordenação
Visões
Os Callbacks mudaram
Conforme o framework amadureceu:
 Pessoas fizeram novos plugins
 Os Plugins precisavam de controle
 Queria-se alterar a saída
Ordem das operações foi mudada
Visões

avaliar scripts
avaliar o conteúdo
beforeLayout()
beforeRender()
render()
Visões

beforeLayout()
beforeRender()
avaliar scripts
avaliar o conteúdo
render()
Email
Envie Emails de qualquer lugar!
         É o futuro!
Email
Era restrito ao uso do Controlador com um
Componente
  ... ou um hack terrível para habilita-lo em
  outros lugares
Agora é uma biblioteca do núcleo
Use em qualquer lugar
Há Wrappers para prover usos nos modelos e
controladores
Simples, e efetivo
Novas
Funcionalidades
PDO
Já era hora!!
PDO

Sim, inacreditávelmente, sim!
datasources do PDO agora disponíveis na 2.0
Trabalho com a Microsoft para suportar o
MSSQL foi finalizado com os novos drivers do
PDO
PDO

Todos bancos de dados trabalham da mesma forma
Troca de SGBD de maneira simples
Fornece garantias para troca de contexto:
 Ambiente de Desenvolvimento
 Ambiente de Produção
Reescrevendo
   URLs
 Simplificando requisição de
            dados
Reescrevendo URLs
  Anteriormente:
   /index.php?url=controller/action/data
  Agora:
   /index.php/controller/action/data


  O que isso significa para os desenvolvedores?
Reescrevendo URLs

  Simplifica a estrutura interna para reescrita
  Operações entre servidores mais fácil
    Diversos mecanismos de reescrita
    Instalações que não sejam apache
Parametros Nomeados
    Agora permite que arrays sejam passados
    Permite até arrays aninhados
Parametros Nomeados
Autenticação
Autenticação
Completamente refatorada
Não faz mais hash automático das senhas
Authentication handlers
Objetos Personalizados de autenticação
Logar um usuário manualmente
Basic Authentication
Digest Authentication
Stateless Authentication
Estrutura de
 Arquivos
  E carga de classes
Estrutura de Arquivos
    PSR-0
      http://blog.montmere.com/2011/09/21/psr-0-
      final-proposal/

    App::import => App::uses
    Isso habilita carregar de maneira tardia
Nomes de Arquivos
•   my_things_controller.php => MyThingsController.php


•   form.php (um Helper) => FormHelper.php


•   session.php (um Componente) => SessionComponent.php
Nomes de Pastas
Pastas CamelCased:
Config                         Model/Behavior
Console                        Plugin
Controller                     Test
Controller/Component           Vendor
Lib                            View
Locale                         View/Helper
Model

          Pastas caixa baixa:
          tmp
          webroot
Debugando
Você estava esperando por
          isso…
Debugando
Não há mais saidas HTML no console de
debugging
Usa blocos Ascii para ficar distinto
Mais Detalhes
Guia de Migração p/ Cake 2.0:
 https://github.com/cakephp/docs/blob/master/e
 n/appendices/2-0-migration-guide.rst


Lighthouse app
 http://cakephp.lighthouseapp.com/projects/426
 48-cakephp
Pegue o código

http://cakephp.org
http://github.com/cakephp/cakephp
  Branch: 2.0
Perguntas?
Comentários?
  Abraços?

 Baseado nos slides de Graham Weldon, disponíveis em:
           http://www.slideshare.net/predominant

Cakephp 2.0 - O que mudou