SlideShare une entreprise Scribd logo
1  sur  72
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

Contenu connexe

Tendances

Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppetRamon Mota
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
Servlets E Applet
Servlets E AppletServlets E Applet
Servlets E Appletasiramage
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoEduardo Mendes
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 

Tendances (18)

Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Tcc anexo i
Tcc   anexo iTcc   anexo i
Tcc anexo i
 
Servlets E Applet
Servlets E AppletServlets E Applet
Servlets E Applet
 
Benchmarking Tools
Benchmarking ToolsBenchmarking Tools
Benchmarking Tools
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuração
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Maven introdução Muito Rápida
Maven introdução Muito RápidaMaven introdução Muito Rápida
Maven introdução Muito Rápida
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
Rancher e ansible
Rancher e ansibleRancher e ansible
Rancher e ansible
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Zope
ZopeZope
Zope
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 

En vedette

Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14Leandro Almeida
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Bruno Abinader
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosbshecht
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...Dafmet Ufpel
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonBruno Abinader
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefastarcisioti
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processosAnderson Lago
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDAFilipo Mór
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 

En vedette (20)

OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticos
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o Cython
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
Grupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares LivresGrupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares Livres
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 

Similaire à Cakephp 2.0 - O que mudou

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetosFabiano Rodrigues
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 

Similaire à Cakephp 2.0 - O que mudou (20)

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
apache+ssl+Jserv
apache+ssl+Jservapache+ssl+Jserv
apache+ssl+Jserv
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Palestra
PalestraPalestra
Palestra
 
Cake Php
Cake PhpCake Php
Cake Php
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 
PHP FrameWARks - CakePHP
PHP FrameWARks - CakePHPPHP FrameWARks - CakePHP
PHP FrameWARks - CakePHP
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 

Cakephp 2.0 - O que mudou