SlideShare uma empresa Scribd logo
CakePHP
Desenvolvimento ágil e seguro




       Ivan Rosolen
Autor
✦   Bacharel em Sistemas de Informação pela FMP
✦   MBA em Gerência de Projetos – PMI pela FIAP
✦   Desenvolvedor PHP a mais de 5 anos
✦   Fundador do PHPSP
✦   Dublês, acrobata, palhaço ....
Agenda
Agenda
✦   O que é?
Agenda
✦   O que é?
✦   Quem está usando?
Agenda
✦   O que é?
✦   Quem está usando?
✦   Porque estão usando?
Agenda
✦   O que é?
✦   Quem está usando?
✦   Porque estão usando?
✦   Intalação/Configuração
Agenda
✦   O que é?
✦   Quem está usando?
✦   Porque estão usando?
✦   Intalação/Configuração
✦   Convenções CakePHP
Agenda
✦   O que é?
✦   Quem está usando?
✦   Porque estão usando?
✦   Intalação/Configuração
✦   Convenções CakePHP
✦   Bake
Agenda
✦   O que é?
✦   Quem está usando?
✦   Porque estão usando?
✦   Intalação/Configuração
✦   Convenções CakePHP
✦   Bake
✦   ????
O Que É?
O Que É?
É um framework de desenvolvimento rápido para PHP que
fornece uma arquitetura extensível, manutenção e
implantação de aplicativos. Utiliza padrões de projeto
conhecidos como MVC e ORM.

Com foco em Convenção ao invéz de configuração, ele
reduz os custos de desenvolvimento e ajuda os
desenvolvedores a escreverem menos código.
Quem Está Usando?
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
Porque Estão Usando?
Porque Estão Usando?
✦   MVC
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
✦   Validação
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
✦   Validação
✦   Internacionalização (locale)
Porque Estão Usando?
✦   MVC
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
✦   Validação
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
Porque Estão Usando?
✦   MVC                             ✦   Desenvolvimento em paralelo
✦   ORM (ActiveRecord)
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
✦   Validação
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
Porque Estão Usando?
✦   MVC                             ✦   Desenvolvimento em paralelo
✦   ORM (ActiveRecord)              ✦   PADRÕES - Melhor manutenção de Código
✦   CRUD e Scaffolding
✦   Rotas para tratar requisições
✦   Validação
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
Porque Estão Usando?
✦   MVC                             ✦   Desenvolvimento em paralelo
✦   ORM (ActiveRecord)              ✦   PADRÕES - Melhor manutenção de Código
✦   CRUD e Scaffolding              ✦   Comunidade ativa
✦   Rotas para tratar requisições
✦   Validação
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
Porque Estão Usando?
✦   MVC                             ✦   Desenvolvimento em paralelo
✦   ORM (ActiveRecord)              ✦   PADRÕES - Melhor manutenção de Código
✦   CRUD e Scaffolding              ✦   Comunidade ativa
✦   Rotas para tratar requisições   ✦   PHP 4 e 5
✦   Validação
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
Porque Estão Usando?
✦   MVC                             ✦   Desenvolvimento em paralelo
✦   ORM (ActiveRecord)              ✦   PADRÕES - Melhor manutenção de Código
✦   CRUD e Scaffolding              ✦   Comunidade ativa
✦   Rotas para tratar requisições   ✦   PHP 4 e 5
✦   Validação                       ✦   User Friendly
✦   Internacionalização (locale)
✦   URL Amigáveis (mod_rewrite)
MVC
MVC
MVC




  http://betterexplained.com
Convenções
Exemplo User
Tabela

Nome tabela sempre no Plural
Tabela

Nome tabela sempre no Plural


      Exemplo: Users
Model
Model

Nome do modelo sempre no Singular
Model

Nome do modelo sempre no Singular

       Exemplo:
       Arquivo:
Model

Nome do modelo sempre no Singular

       Exemplo: class User
       Arquivo: user.php
Model
Model
Controller
Controller

Nome do modelo sempre no Plural
Controller

Nome do modelo sempre no Plural

 Exemplo:
 Arquivo:
Controller

Nome do modelo sempre no Plural

 Exemplo: class UsersController
 Arquivo: users_controller.php
Controller
Controller
Views
Views

 Arquivo:
Chamada:
 Legenda:
Views

 Arquivo:   views/users/edit.ctp
Chamada:    users/edit/3
 Legenda:   controller/function/parâmetros
Views
Views
Helpers, plugins, elements....
The CheatSheet - CakePHP 1.2
Config                                                                  Model                                               Controller                            View                                    Models
                                                                                                                                                                                                                          Conventions
                     Core    Properties                                                                                                                                                      Properties
                                                                                                                                                                   $action              $models
debug
App.encoding
                             $cacheQueries          $recursive
                                                                                        Relationships                 Properties                                   $autoLayout          $name
                                                                                                                                                                                                          Class:   singular, camel cased
                             $data                  $useDbConfig                                                                                                                                                   (LineItem, Person)
App.baseUrl                                                                             $belongsTo                    $name                $layout                 $autoRender          $pageTitle
                             $displayField          $useTable                                                                                                      $base                $params
App.dir                                                                                 $hasAndBelongsToMany          $action              $output
                             $id                    $validate                                                                                                      $ext                 $plugin           File:    singular, underscored
Cache.check                                                                                                           $autoLayout          $pageTitle
                             $name                  $validationErrors                   $hasMany                                                                   $hasRendered         $subDir                    (line_item.php, person.php)
Cache.disable                                                                                                         $autoRender          $params
Acl.classname                $primaryKey            $_schema                            $hasOne                                                                    $helpers             $themeWeb
                                                                                                                      $base                $persistModel
Acl.database                                                                                                          $cacheAction         $plugin                 $here                $uses             Table:   plural, underscored
Routing.admin                                                                                                         $components          $uses                   $layout              $viewPath                  (line_items, people)
Session.start                Methods                                                                                  $data                $view                   $loaded
Session.save                                                                                                          $helpers             $viewPath
                             bind(params)                                       invalidFields([data])
Session.checkAgent                                                                                                    $here                $webroot
Session.cookie               create([data])                                     isForeignKey(field)                                                                                            Methods
Session.timeout              delete([id, cascade])                              isUnique(fields, [or])                                                                                                    Controllers
                                                                                                                                                                  addScript (name, [content])
Security.level               deleteAll(conditions, [cascade, callbacks])        query([sql])
                                                                                                                                                                  element (name, [params, loadHelpers])
Security.salt                escapeField(field)                                 read([fields, id])                    Methods                                     error (code, name, message)             Class:   plural, camel cased,
Asset.filter.js              exists()                                           save([data, options])                                                                                                              ends in "Controller"
                                                                                                                                                                  getVar (var)
Asset.filter.css                                                                                                      constructClasses()
                             field(name, conditions, order)                     saveAll([data, options])                                                          getVars ( )                                      (LineItemsController,
                                                                                                                      header(status)
                             find(type, [options])                              saveField([name, value, validate])                                                renderCache ( lename, timeStart)                 PeopleController)
                                                                                                                      paginate ([object, scope, whitelist])
                             getAffectedRows()                                  schema([field])                                                                   render ([action, layout, le])
              Index.php                                                                                               disableCache()                              renderLayout(content, [layout])
                             getAssociated([type])                              set(one, [two])                       postConditions(data)                                                                File:    plural, underscored
CAKE_CORE_INCLUDE_PATH                                                                                                                                            set (one, [tset (one, [two])                     (line_items_controller.php,
                             getColumnType(column)                              setDataSource(dataSource)             redirect(url, [status])
ROOT                                                                                                                                                                                                               people_controller.php)
                             getInsertID()                                      setSource(tableName)                  referer([default, local])
WWW_ROOT
WEBROOT_DIR                  getNumRows()                                       unbindModel(params, [reset])          render([action, layout, le])
                             hasAny([conditions])                               updateAll(fields, [conditions])       set(one, [two])


                     Paths
                             hasField(name)
                             invalidate(field)
                                                                                updateCounterCache([keys, created])
                                                                                validates([options])
                                                                                                                      setAction (action, [param, param, param])
                                                                                                                      validate()                                  Helper                     Properties    Views
                                                                                                                      validateErrors()
APP                                                                                                                                                                $base                $webroot          Path:    controller name, underscored
APP_DIR
                                      Custom Find Types: all, first, count, list, threaded, neighbors                                                              $here                $params
                                                                                                                                                                                                                   (app/views/line_items/<file>,
APP_PATH                                                                                                                                                           $action              $data
                                                                                                                                                                                                                   app/views/people/<file>)
CACHE                        Callbacks                                                                                Callbacks                                    $themeWeb            $plugin
CAKE                                                                                                                                                               $view
COMPONENTS                   beforeDelete()               afterFind(results, primary)   afterSave()                                                                                                       File:    action name, underscored
                                                                                                                      beforeFilter()
CONFIGS                      afterDelete()                beforeValidate()                                            beforeRender()                                                                               (index.ctp, view.ctp,
CONTROLLER_TESTS             beforeFind(query)            beforeSave()                                                afterFilter()                                                            Methods             admin_index.ctp)
CONTROLLERS
CSS                                                                                                                                                               url([url, full])
ELEMENTS                                                                                                                                                          webroot(file)
HELPER_TESTS                                                                                                                                                      clean(text)
                                                                                                                                                                  value([field/options, field, key])
HELPERS
INFLECTIONS                                         Global Functions                                                  Component
JS                                                                                                                                              Properties
LAYOUTS
                                                                                                                        $enabled                                                              Callbacks
LIB_TESTS                     config('fileName')                             __n(singular, plural, count, [return])
LIBS                          debug(message, [escape])                       __d(domain, msg, [return])                                                           afterRender()
LOGS                          pr(string | array | object)                    __dn(domain, singular, plural, count,                                                beforeLayout()
MODEL_TESTS                   e(message)                                          [return])
                                                                                                                                                    Callbacks     afterLayout()
MODELS
                              h(string | array)                              __dc(domain, msg, category,[return])     initialize(&controller)
TESTS
                              am(array, [array, array])                      __dcn(domain, singular, plural,          startup(&controller)
TMP
                              cache(path, data, expires, [target])           count,category, [return])                beforeRender(&controller)
VENDORS
VIEWS                         clearCache([params, type, ext])                __c(msg, category, [return])             beforeRedirect(&controller)
                                                                                                                      shutdown(&controller)
                              env('HTTP_HEADER')
                              __(singular, [return])
ORM
ORM

✦   ActiveRecord
ORM

✦   ActiveRecord
✦   Sem nenhuma configuração
Banco de Dados
Banco de Dados
✦   MySQL (4 or greater)
✦   PostgreSQL
✦   Firebird DB2
✦   Microsoft SQL Server
✦   Oracle
✦   SQLite
✦   ODBC
✦   ADOdb
Validação
Validação
1 - alphaNumeric   11 - equalTo     21 - numeric
2 - between        12 - extension   22 - phone
3 - blank          13 - file         23 - postal
4 - boolean        14 - inList      24 - range
5 - cc             15 - ip          25 - ssn
6 - comparison     16 - maxLength   26 - time
7 - custom         17 - minLength   27 - url
8 - date           18 - money       28 - userDefined
9 - decimal        19 - multiple
10 - email         20 - notEmpty
Internacionalização
Internacionalização
Arquivo: app/locale/pt/LC_MESSAGES/default.po
Internacionalização
  Arquivo: app/locale/pt/LC_MESSAGES/default.po
Controller:
Internacionalização
  Arquivo: app/locale/pt/LC_MESSAGES/default.po
Controller:
Internacionalização
  Arquivo: app/locale/pt/LC_MESSAGES/default.po
Controller:
     View: __(‘nome’)
Internacionalização
  Arquivo: app/locale/pt/LC_MESSAGES/default.po
Controller:
     View: __(‘nome’)
Generator: xgettext
Internacionalização
  Arquivo:    app/locale/pt/LC_MESSAGES/default.po
Controller:
     View:     __(‘nome’)
Generator:    xgettext
      .PO:    msgid "nome"
              msgstr "Nome"
Rotas
O que são rotas?
Aonde eu uso isso?
Rotas
Rotas
Arquivo: app/config/routes.php
Rotas
Arquivo: app/config/routes.php
Rotas
Arquivo: app/config/routes.php
CRUD e Scaffolding
Diferença?
Scaffolding
Scaffolding


Exemplo Users e Groups
Model
Model
Controller
View
View
View




????
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
Desenvolvimento
    Paralelo
Comunidade
Comunidade
✦   Bakery - http://bakery.cakephp.org
Comunidade
✦   Bakery - http://bakery.cakephp.org
✦   Q & A - http://cakeqs.org
Comunidade
✦   Bakery - http://bakery.cakephp.org
✦   Q & A - http://cakeqs.org
✦   FAKE - amf para interfaces flex
Comunidade
✦   Bakery - http://bakery.cakephp.org
✦   Q & A - http://cakeqs.org
✦   FAKE - amf para interfaces flex
✦   IRC - #CakePHP e #CakePHP-PT
Comunidade
✦   Bakery - http://bakery.cakephp.org
✦   Q & A - http://cakeqs.org
✦   FAKE - amf para interfaces flex
✦   IRC - #CakePHP e #CakePHP-PT
✦   Lista de discussão - http://groups.google.com/group/cakephp-pt?hl=pt-PT
Comunidade
✦   Bakery - http://bakery.cakephp.org
✦   Q & A - http://cakeqs.org
✦   FAKE - amf para interfaces flex
✦   IRC - #CakePHP e #CakePHP-PT
✦   Lista de discussão - http://groups.google.com/group/cakephp-pt?hl=pt-PT
✦   Eventos internacionais e nacionais
Instalação
Instalação

✦   Apache, PHP, BD da sua escolha instalados e configurados
Instalação

✦   Apache, PHP, BD da sua escolha instalados e configurados
✦   Baixar o cake em www.cakephp.org ou .com.br
Instalação

✦   Apache, PHP, BD da sua escolha instalados e configurados
✦   Baixar o cake em www.cakephp.org ou .com.br
✦   descompactar para a pasta htdocs|www
Diretórios
Diretórios
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
✦   plugins - plugins
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
✦   plugins - plugins
✦   vendors - aplicativos de terceiros
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
✦   plugins - plugins
✦   vendors - aplicativos de terceiros
✦   views - telas da aplicação (.ctp), elements, error pages, helpers
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
✦   plugins - plugins
✦   vendors - aplicativos de terceiros
✦   views - telas da aplicação (.ctp), elements, error pages, helpers
✦   webroot - raiz da aplicação, CSS, imagens e JavaScript
Diretórios
✦   config - configuração de BD, aplicação, bootstrapping, etc
✦   controllers - controllers e componentes
✦   locale - internacionalização
✦   models - models, behaviors e datasources
✦   plugins - plugins
✦   vendors - aplicativos de terceiros
✦   views - telas da aplicação (.ctp), elements, error pages, helpers
✦   webroot - raiz da aplicação, CSS, imagens e JavaScript
✦   cake - CORE do CakePHP
Configurações
Configurações

✦   Apache: mod_rewrite
Configurações

✦   Apache: mod_rewrite
✦   BD: Usuário e Database
Configurações

✦   Apache: mod_rewrite
✦   BD: Usuário e Database
✦   Permissão de escrita para o ‘apache’ no diretório app/tmp
Configurações

✦   Apache: mod_rewrite
✦   BD: Usuário e Database
✦   Permissão de escrita para o ‘apache’ no diretório app/tmp
✦   Alterar arquivo app/config/database.php
    (possível criar com BAKE)
database.php
database.php
CakePHP e o desenvolvimento rápido
BAKE
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
Contato

ivan@phpsp.org.br
@ivanrosolen
http://www.ivanrosolen.com

Mais conteúdo relacionado

PDF
Slide Aula - Curso CakePHP
PDF
CakePHP - Aprendendo a fazer o primeiro bolo
PPT
Desenvolvendo aplicações web com o framework cakephp
PPTX
CakePHP - Configurando o ambiente de desenvolvimento no Windows
PDF
Desenvolvimento Web com CakePHP
PDF
Workshop Ruby on Rails dia 2 ruby-pt
PDF
Desenvolvimento Web Avançado usando PHP
PDF
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Slide Aula - Curso CakePHP
CakePHP - Aprendendo a fazer o primeiro bolo
Desenvolvendo aplicações web com o framework cakephp
CakePHP - Configurando o ambiente de desenvolvimento no Windows
Desenvolvimento Web com CakePHP
Workshop Ruby on Rails dia 2 ruby-pt
Desenvolvimento Web Avançado usando PHP
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...

Mais procurados (20)

PDF
JSF com Primefaces
PDF
Apresentando o Yii Framework
PPTX
Introdução a jsf
PDF
Desmistificando o Framework da Zend
PPT
JavaServer Faces Produtividade em Desenvolvimento
PDF
Web Offline
PDF
Java Web 1 Introducao
PPTX
Apresentação JSF
PPT
Anatomia do JSF, JavaServer Faces
PPT
Servlets e jsp
PPTX
Curso jsf
PPT
Cakephp - framework de desenvolvimento de aplicações Web em PHP
PPT
Desenvolvimento web em java com JSP e Servlets
PPS
Lampada Php Conference Brasil 2007 Palestra
PDF
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
PDF
JSF - JavaServer Faces
PDF
Ionic 2/3 + Firebase
PPT
Java Web Dev Introdução
PPT
Produtividade com JavaServer Faces
JSF com Primefaces
Apresentando o Yii Framework
Introdução a jsf
Desmistificando o Framework da Zend
JavaServer Faces Produtividade em Desenvolvimento
Web Offline
Java Web 1 Introducao
Apresentação JSF
Anatomia do JSF, JavaServer Faces
Servlets e jsp
Curso jsf
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Desenvolvimento web em java com JSP e Servlets
Lampada Php Conference Brasil 2007 Palestra
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
JSF - JavaServer Faces
Ionic 2/3 + Firebase
Java Web Dev Introdução
Produtividade com JavaServer Faces
Anúncio

Destaque (20)

PDF
Criando APIs usando o micro-framework Respect
PDF
PDF
Php e Cassandra
PDF
CakePHP com sotaque brasileiro
PDF
Recursividade
PDF
Apostila cobol
PDF
Assembly para pc-25paginas
PPTX
Introdução ao PHP
PDF
Análise assintótica
PDF
Funções em C
PDF
PROGRAMAS QBASIC
PPTX
C# .NET - Um overview da linguagem
PPTX
Glosario de qbasic liliana
PDF
Conceitos básicos de AEDS
PDF
Dicas para aumentar a performance de um software PHP
PPTX
Linguagem C - Uniões
PDF
Otimizacao de websites em PHP
PPTX
Linguagem C - Estruturas
PDF
Relações de recorrência
PPTX
Trabalho cobol e basic
Criando APIs usando o micro-framework Respect
Php e Cassandra
CakePHP com sotaque brasileiro
Recursividade
Apostila cobol
Assembly para pc-25paginas
Introdução ao PHP
Análise assintótica
Funções em C
PROGRAMAS QBASIC
C# .NET - Um overview da linguagem
Glosario de qbasic liliana
Conceitos básicos de AEDS
Dicas para aumentar a performance de um software PHP
Linguagem C - Uniões
Otimizacao de websites em PHP
Linguagem C - Estruturas
Relações de recorrência
Trabalho cobol e basic
Anúncio

Semelhante a CakePHP e o desenvolvimento rápido (20)

ODP
Php 07 Cakephp
PPSX
5 Maneiras de melhorar seu código PHP
PDF
Desenvolvimento ágil com Kohana framework
PPT
PHP FrameWARks - FISL
PDF
Crescendo profissionalmente com o apoio comunidade
PDF
Palestra - Symfony Framework MVC PHP 5
PDF
Php Conf08 Refactoring
PDF
Fisl 11 - Ecossistema Ruby on Rails
PDF
Introdução ao framework CakePHP
PDF
Php5 e a orientação a objetos
PDF
Ecommerce, mais simples do que parece
PDF
Ecommerce, mais simples do que parece
PDF
Aplicações Profissionais para Internet com Zend Framework
PDF
Introdução ao CakePHP
PPT
Cake Php
PDF
Meu projeto final - Neobase 2.0
PDF
CakePHP
PPTX
PDF
Da Argila Ao Forte - Como desenvolver uma loja virtual
PDF
PHP, Mercado e Certificações
Php 07 Cakephp
5 Maneiras de melhorar seu código PHP
Desenvolvimento ágil com Kohana framework
PHP FrameWARks - FISL
Crescendo profissionalmente com o apoio comunidade
Palestra - Symfony Framework MVC PHP 5
Php Conf08 Refactoring
Fisl 11 - Ecossistema Ruby on Rails
Introdução ao framework CakePHP
Php5 e a orientação a objetos
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Aplicações Profissionais para Internet com Zend Framework
Introdução ao CakePHP
Cake Php
Meu projeto final - Neobase 2.0
CakePHP
Da Argila Ao Forte - Como desenvolver uma loja virtual
PHP, Mercado e Certificações

Mais de Ivan Rosolen (15)

PDF
15 mandamentos de um bom programador
PDF
Utilizando Filas com PHP
PDF
Filas com php
PDF
Boas Práticas com PHP
PDF
Mercado de Tecnologia
PPTX
Deploy automatizado de Aplicações no Jelastic
PDF
Autenticação com Json Web Token (JWT)
PDF
JSON Web Tokens
PDF
Tecnologias e Inovação
PDF
Rest Beer v2
PPTX
Jelastic
PPTX
Aws video creator
PPTX
Cassandra 7 masters
PDF
Quando o planejamento da infraestrutura leva ao sucesso
PDF
Case: PHP como Base de Digital Asset Management – arizona.flow
15 mandamentos de um bom programador
Utilizando Filas com PHP
Filas com php
Boas Práticas com PHP
Mercado de Tecnologia
Deploy automatizado de Aplicações no Jelastic
Autenticação com Json Web Token (JWT)
JSON Web Tokens
Tecnologias e Inovação
Rest Beer v2
Jelastic
Aws video creator
Cassandra 7 masters
Quando o planejamento da infraestrutura leva ao sucesso
Case: PHP como Base de Digital Asset Management – arizona.flow

Último (19)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e liquidação no SAP Transportation Management, TM130 Col18
Processos na gestão de transportes, TM100 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Apple Pippin Uma breve introdução. - David Glotz
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula04-Academia Heri- Tecnologia Geral 2025
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula 18 - Manipulacao De Arquivos python
COBITxITIL-Entenda as diferença em uso governança TI
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx

CakePHP e o desenvolvimento rápido

  • 1. CakePHP Desenvolvimento ágil e seguro Ivan Rosolen
  • 2. Autor ✦ Bacharel em Sistemas de Informação pela FMP ✦ MBA em Gerência de Projetos – PMI pela FIAP ✦ Desenvolvedor PHP a mais de 5 anos ✦ Fundador do PHPSP ✦ Dublês, acrobata, palhaço ....
  • 4. Agenda ✦ O que é?
  • 5. Agenda ✦ O que é? ✦ Quem está usando?
  • 6. Agenda ✦ O que é? ✦ Quem está usando? ✦ Porque estão usando?
  • 7. Agenda ✦ O que é? ✦ Quem está usando? ✦ Porque estão usando? ✦ Intalação/Configuração
  • 8. Agenda ✦ O que é? ✦ Quem está usando? ✦ Porque estão usando? ✦ Intalação/Configuração ✦ Convenções CakePHP
  • 9. Agenda ✦ O que é? ✦ Quem está usando? ✦ Porque estão usando? ✦ Intalação/Configuração ✦ Convenções CakePHP ✦ Bake
  • 10. Agenda ✦ O que é? ✦ Quem está usando? ✦ Porque estão usando? ✦ Intalação/Configuração ✦ Convenções CakePHP ✦ Bake ✦ ????
  • 12. O Que É? É um framework de desenvolvimento rápido para PHP que fornece uma arquitetura extensível, manutenção e implantação de aplicativos. Utiliza padrões de projeto conhecidos como MVC e ORM. Com foco em Convenção ao invéz de configuração, ele reduz os custos de desenvolvimento e ajuda os desenvolvedores a escreverem menos código.
  • 21. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord)
  • 22. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding
  • 23. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições
  • 24. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições ✦ Validação
  • 25. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições ✦ Validação ✦ Internacionalização (locale)
  • 26. Porque Estão Usando? ✦ MVC ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições ✦ Validação ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 27. Porque Estão Usando? ✦ MVC ✦ Desenvolvimento em paralelo ✦ ORM (ActiveRecord) ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições ✦ Validação ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 28. Porque Estão Usando? ✦ MVC ✦ Desenvolvimento em paralelo ✦ ORM (ActiveRecord) ✦ PADRÕES - Melhor manutenção de Código ✦ CRUD e Scaffolding ✦ Rotas para tratar requisições ✦ Validação ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 29. Porque Estão Usando? ✦ MVC ✦ Desenvolvimento em paralelo ✦ ORM (ActiveRecord) ✦ PADRÕES - Melhor manutenção de Código ✦ CRUD e Scaffolding ✦ Comunidade ativa ✦ Rotas para tratar requisições ✦ Validação ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 30. Porque Estão Usando? ✦ MVC ✦ Desenvolvimento em paralelo ✦ ORM (ActiveRecord) ✦ PADRÕES - Melhor manutenção de Código ✦ CRUD e Scaffolding ✦ Comunidade ativa ✦ Rotas para tratar requisições ✦ PHP 4 e 5 ✦ Validação ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 31. Porque Estão Usando? ✦ MVC ✦ Desenvolvimento em paralelo ✦ ORM (ActiveRecord) ✦ PADRÕES - Melhor manutenção de Código ✦ CRUD e Scaffolding ✦ Comunidade ativa ✦ Rotas para tratar requisições ✦ PHP 4 e 5 ✦ Validação ✦ User Friendly ✦ Internacionalização (locale) ✦ URL Amigáveis (mod_rewrite)
  • 32. MVC
  • 33. MVC
  • 38. Tabela Nome tabela sempre no Plural Exemplo: Users
  • 39. Model
  • 40. Model Nome do modelo sempre no Singular
  • 41. Model Nome do modelo sempre no Singular Exemplo: Arquivo:
  • 42. Model Nome do modelo sempre no Singular Exemplo: class User Arquivo: user.php
  • 43. Model
  • 44. Model
  • 46. Controller Nome do modelo sempre no Plural
  • 47. Controller Nome do modelo sempre no Plural Exemplo: Arquivo:
  • 48. Controller Nome do modelo sempre no Plural Exemplo: class UsersController Arquivo: users_controller.php
  • 51. Views
  • 53. Views Arquivo: views/users/edit.ctp Chamada: users/edit/3 Legenda: controller/function/parâmetros
  • 54. Views
  • 55. Views
  • 57. The CheatSheet - CakePHP 1.2 Config Model Controller View Models Conventions Core Properties Properties $action $models debug App.encoding $cacheQueries $recursive Relationships Properties $autoLayout $name Class: singular, camel cased $data $useDbConfig (LineItem, Person) App.baseUrl $belongsTo $name $layout $autoRender $pageTitle $displayField $useTable $base $params App.dir $hasAndBelongsToMany $action $output $id $validate $ext $plugin File: singular, underscored Cache.check $autoLayout $pageTitle $name $validationErrors $hasMany $hasRendered $subDir (line_item.php, person.php) Cache.disable $autoRender $params Acl.classname $primaryKey $_schema $hasOne $helpers $themeWeb $base $persistModel Acl.database $cacheAction $plugin $here $uses Table: plural, underscored Routing.admin $components $uses $layout $viewPath (line_items, people) Session.start Methods $data $view $loaded Session.save $helpers $viewPath bind(params) invalidFields([data]) Session.checkAgent $here $webroot Session.cookie create([data]) isForeignKey(field) Methods Session.timeout delete([id, cascade]) isUnique(fields, [or]) Controllers addScript (name, [content]) Security.level deleteAll(conditions, [cascade, callbacks]) query([sql]) element (name, [params, loadHelpers]) Security.salt escapeField(field) read([fields, id]) Methods error (code, name, message) Class: plural, camel cased, Asset.filter.js exists() save([data, options]) ends in "Controller" getVar (var) Asset.filter.css constructClasses() field(name, conditions, order) saveAll([data, options]) getVars ( ) (LineItemsController, header(status) find(type, [options]) saveField([name, value, validate]) renderCache ( lename, timeStart) PeopleController) paginate ([object, scope, whitelist]) getAffectedRows() schema([field]) render ([action, layout, le]) Index.php disableCache() renderLayout(content, [layout]) getAssociated([type]) set(one, [two]) postConditions(data) File: plural, underscored CAKE_CORE_INCLUDE_PATH set (one, [tset (one, [two]) (line_items_controller.php, getColumnType(column) setDataSource(dataSource) redirect(url, [status]) ROOT people_controller.php) getInsertID() setSource(tableName) referer([default, local]) WWW_ROOT WEBROOT_DIR getNumRows() unbindModel(params, [reset]) render([action, layout, le]) hasAny([conditions]) updateAll(fields, [conditions]) set(one, [two]) Paths hasField(name) invalidate(field) updateCounterCache([keys, created]) validates([options]) setAction (action, [param, param, param]) validate() Helper Properties Views validateErrors() APP $base $webroot Path: controller name, underscored APP_DIR Custom Find Types: all, first, count, list, threaded, neighbors $here $params (app/views/line_items/<file>, APP_PATH $action $data app/views/people/<file>) CACHE Callbacks Callbacks $themeWeb $plugin CAKE $view COMPONENTS beforeDelete() afterFind(results, primary) afterSave() File: action name, underscored beforeFilter() CONFIGS afterDelete() beforeValidate() beforeRender() (index.ctp, view.ctp, CONTROLLER_TESTS beforeFind(query) beforeSave() afterFilter() Methods admin_index.ctp) CONTROLLERS CSS url([url, full]) ELEMENTS webroot(file) HELPER_TESTS clean(text) value([field/options, field, key]) HELPERS INFLECTIONS Global Functions Component JS Properties LAYOUTS $enabled Callbacks LIB_TESTS config('fileName') __n(singular, plural, count, [return]) LIBS debug(message, [escape]) __d(domain, msg, [return]) afterRender() LOGS pr(string | array | object) __dn(domain, singular, plural, count, beforeLayout() MODEL_TESTS e(message) [return]) Callbacks afterLayout() MODELS h(string | array) __dc(domain, msg, category,[return]) initialize(&controller) TESTS am(array, [array, array]) __dcn(domain, singular, plural, startup(&controller) TMP cache(path, data, expires, [target]) count,category, [return]) beforeRender(&controller) VENDORS VIEWS clearCache([params, type, ext]) __c(msg, category, [return]) beforeRedirect(&controller) shutdown(&controller) env('HTTP_HEADER') __(singular, [return])
  • 58. ORM
  • 59. ORM ✦ ActiveRecord
  • 60. ORM ✦ ActiveRecord ✦ Sem nenhuma configuração
  • 62. Banco de Dados ✦ MySQL (4 or greater) ✦ PostgreSQL ✦ Firebird DB2 ✦ Microsoft SQL Server ✦ Oracle ✦ SQLite ✦ ODBC ✦ ADOdb
  • 64. Validação 1 - alphaNumeric 11 - equalTo 21 - numeric 2 - between 12 - extension 22 - phone 3 - blank 13 - file 23 - postal 4 - boolean 14 - inList 24 - range 5 - cc 15 - ip 25 - ssn 6 - comparison 16 - maxLength 26 - time 7 - custom 17 - minLength 27 - url 8 - date 18 - money 28 - userDefined 9 - decimal 19 - multiple 10 - email 20 - notEmpty
  • 67. Internacionalização Arquivo: app/locale/pt/LC_MESSAGES/default.po Controller:
  • 68. Internacionalização Arquivo: app/locale/pt/LC_MESSAGES/default.po Controller:
  • 69. Internacionalização Arquivo: app/locale/pt/LC_MESSAGES/default.po Controller: View: __(‘nome’)
  • 70. Internacionalização Arquivo: app/locale/pt/LC_MESSAGES/default.po Controller: View: __(‘nome’) Generator: xgettext
  • 71. Internacionalização Arquivo: app/locale/pt/LC_MESSAGES/default.po Controller: View: __(‘nome’) Generator: xgettext .PO: msgid "nome" msgstr "Nome"
  • 72. Rotas
  • 73. O que são rotas?
  • 74. Aonde eu uso isso?
  • 75. Rotas
  • 83. Model
  • 84. Model
  • 86. View
  • 87. View
  • 92. Desenvolvimento Paralelo
  • 94. Comunidade ✦ Bakery - http://bakery.cakephp.org
  • 95. Comunidade ✦ Bakery - http://bakery.cakephp.org ✦ Q & A - http://cakeqs.org
  • 96. Comunidade ✦ Bakery - http://bakery.cakephp.org ✦ Q & A - http://cakeqs.org ✦ FAKE - amf para interfaces flex
  • 97. Comunidade ✦ Bakery - http://bakery.cakephp.org ✦ Q & A - http://cakeqs.org ✦ FAKE - amf para interfaces flex ✦ IRC - #CakePHP e #CakePHP-PT
  • 98. Comunidade ✦ Bakery - http://bakery.cakephp.org ✦ Q & A - http://cakeqs.org ✦ FAKE - amf para interfaces flex ✦ IRC - #CakePHP e #CakePHP-PT ✦ Lista de discussão - http://groups.google.com/group/cakephp-pt?hl=pt-PT
  • 99. Comunidade ✦ Bakery - http://bakery.cakephp.org ✦ Q & A - http://cakeqs.org ✦ FAKE - amf para interfaces flex ✦ IRC - #CakePHP e #CakePHP-PT ✦ Lista de discussão - http://groups.google.com/group/cakephp-pt?hl=pt-PT ✦ Eventos internacionais e nacionais
  • 101. Instalação ✦ Apache, PHP, BD da sua escolha instalados e configurados
  • 102. Instalação ✦ Apache, PHP, BD da sua escolha instalados e configurados ✦ Baixar o cake em www.cakephp.org ou .com.br
  • 103. Instalação ✦ Apache, PHP, BD da sua escolha instalados e configurados ✦ Baixar o cake em www.cakephp.org ou .com.br ✦ descompactar para a pasta htdocs|www
  • 106. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc
  • 107. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes
  • 108. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização
  • 109. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources
  • 110. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources ✦ plugins - plugins
  • 111. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources ✦ plugins - plugins ✦ vendors - aplicativos de terceiros
  • 112. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources ✦ plugins - plugins ✦ vendors - aplicativos de terceiros ✦ views - telas da aplicação (.ctp), elements, error pages, helpers
  • 113. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources ✦ plugins - plugins ✦ vendors - aplicativos de terceiros ✦ views - telas da aplicação (.ctp), elements, error pages, helpers ✦ webroot - raiz da aplicação, CSS, imagens e JavaScript
  • 114. Diretórios ✦ config - configuração de BD, aplicação, bootstrapping, etc ✦ controllers - controllers e componentes ✦ locale - internacionalização ✦ models - models, behaviors e datasources ✦ plugins - plugins ✦ vendors - aplicativos de terceiros ✦ views - telas da aplicação (.ctp), elements, error pages, helpers ✦ webroot - raiz da aplicação, CSS, imagens e JavaScript ✦ cake - CORE do CakePHP
  • 116. Configurações ✦ Apache: mod_rewrite
  • 117. Configurações ✦ Apache: mod_rewrite ✦ BD: Usuário e Database
  • 118. Configurações ✦ Apache: mod_rewrite ✦ BD: Usuário e Database ✦ Permissão de escrita para o ‘apache’ no diretório app/tmp
  • 119. Configurações ✦ Apache: mod_rewrite ✦ BD: Usuário e Database ✦ Permissão de escrita para o ‘apache’ no diretório app/tmp ✦ Alterar arquivo app/config/database.php (possível criar com BAKE)
  • 123. BAKE