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?
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




????
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
BAKE
Contato

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

CakePHP e o desenvolvimento rápido

  • 1.
  • 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 ....
  • 3.
  • 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 ✦ ????
  • 11.
  • 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.
  • 13.
  • 19.
  • 20.
  • 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.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
    Tabela Nome tabela sempreno Plural Exemplo: Users
  • 39.
  • 40.
    Model Nome do modelosempre no Singular
  • 41.
    Model Nome do modelosempre no Singular Exemplo: Arquivo:
  • 42.
    Model Nome do modelosempre no Singular Exemplo: class User Arquivo: user.php
  • 43.
  • 44.
  • 45.
  • 46.
    Controller Nome do modelosempre no Plural
  • 47.
    Controller Nome do modelosempre no Plural Exemplo: Arquivo:
  • 48.
    Controller Nome do modelosempre no Plural Exemplo: class UsersController Arquivo: users_controller.php
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
    Views Arquivo: views/users/edit.ctp Chamada: users/edit/3 Legenda: controller/function/parâmetros
  • 54.
  • 55.
  • 56.
  • 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.
  • 59.
    ORM ✦ ActiveRecord
  • 60.
    ORM ✦ ActiveRecord ✦ Sem nenhuma configuração
  • 61.
  • 62.
    Banco de Dados ✦ MySQL (4 or greater) ✦ PostgreSQL ✦ Firebird DB2 ✦ Microsoft SQL Server ✦ Oracle ✦ SQLite ✦ ODBC ✦ ADOdb
  • 63.
  • 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
  • 65.
  • 66.
  • 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.
  • 73.
    O que sãorotas?
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 92.
  • 93.
  • 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
  • 100.
  • 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
  • 104.
  • 105.
  • 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
  • 115.
  • 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)
  • 120.
  • 121.
  • 123.
  • 132.