View
262
Download
11
Category
Preview:
Citation preview
7/21/2019 Apostila Curso Cakephp 2km
1/226
7/21/2019 Apostila Curso Cakephp 2km
2/226
Nota de copyright
As informaes contidas neste documento esto sujeitas a alteraes sem prvio aviso. As empresas, os
nomes de pessoas e os dados aqui mencionados so fictcios, salvo indicao em contrrio.
Nenhuma parte deste documento pode ser reproduzida ou transmitida de qualquer forma ou meio, eletrnico
ou mecnico, para qualquer propsito, sem a permisso expressa, por escrito, da 2km interativa!.
2011 2km interativa!. Todos os direitos reservados.
CakePHPTM marca registrada da Cake Software Foundation, Inc.
7/21/2019 Apostila Curso Cakephp 2km
3/226
7/21/2019 Apostila Curso Cakephp 2km
4/226
I - Introduo 6
II - Sobre o CakePHP 6
III - Vantagens do CakePHP 6
1 - Instalao 8
1.1 - Requisitos para Utilizao do CakePHP 8
1.2 - Configurando o Apache 8
1.2.1 - Configurando o mod_rewrite 8
1.2.2 - Configurando um endereo por meio de alias 8
1.2.3 - Configurando um endereo usando virtual host 9
1.2.4 - Configurando o mod_userdir 10
1.2.5 - Comparando as configuraes do Apache 10
1.3 - Instalando o CakePHP 11
1.4 - Estrutura de diretrios 11
1.5 - Arquivos de configurao do CakePHP 12
1.5.1 - O arquivo de configurao database.php 12
1.5.2 - O arquivo de configurao core.php 13
1.5.3 - O arquivo de configurao bootstrap.php 14
1.6 - Instalao Avanada do CakePHP 15
2 - Desenvolvendo com o CakePHP 16
2.1 - Convenes no CakePHP 16
2.1.1 - Convenes para nome de arquivos e nome de classes 16
2.1.2 - Convenes para a camada de modelo e banco de dados 17
2.1.3 - Convenes para a camada de controle 17
2.1.4 - Convenes para a camada de viso 18
2.1.5 - Todas as Convenes 19
2.2 - Constantes 19
2.3 - A Arquitetura MVC 21
2.3.1 - A camada de modelo 22
2.3.2 - A camada de controle 43
2.3.3 - A camada de viso 49
2.4 - Usando o bake 53
2.4.1 - Criando um novo projeto 54
2.4.2 - Gerando o arquivo de configurao do banco de dados 54
Contedo
Curso de CakePHP da 2km interativa! | www.2km.com.br
1 of 223
7/21/2019 Apostila Curso Cakephp 2km
5/226
2.4.3 - Gerando as classes de modelo 572.4.4 - Gerando as classes de controle 81
2.4.5 - Gerando as pginas da viso 97
3 - Aperfeioando sua Aplicao 92
3.1 - Rotas 92
3.1.1 - Rota Administrativa 92
3.1.2 - Criando suas Prprias Rotas 93
3.1.3 - Usando Rotas com Prefixo 94
3.1.4 - Entendendo as Rotas Reversas 94
3.2 - Vendors 94
3.3 - DRY 95
3.4 - Behavior 96
3.4.1 - ACL 96
3.4.2 - Containable 97
3.4.3 - Translate 99
3.4.4 - Tree 99
3.5 - Components 102
3.5.1 - ACL 102
3.5.2 - Authentication 103
3.5.3 - Cookies 109
3.5.4 - Email 110
3.5.5 - Request Handling 111
3.5.6 - Security Component 114
3.5.7 - Sessions 114
3.6 - Helpers 115
3.6.1 - AJAX 115
3.6.2 - Cache 116
3.6.3 - Form 117
3.6.4 - HTML 122
3.6.5 - Javascript 126
3.6.6 - Number 128
3.6.7 - Paginator 130
3.6.8 - RSS 131
3.6.9 - Session 133
3.6.10 - Text 133
3.6.11 - Time 1353.6.12 - XML 137
Curso de CakePHP da 2km interativa! | www.2km.com.br
2 of 223
7/21/2019 Apostila Curso Cakephp 2km
6/226
3.7 - Plugins 138
3.7.1 - Criando um Plugin 138
3.7.2 - Camada de Controle 138
3.7.3 - Camada de Modelo 139
3.7.4 - Camada de Viso 139
3.7.5 - Components, Helpers e Behaviors 139
3.7.6 - Imagens, CSS, Javascript 139
3.8 - Core Utility Libraries 139
3.8.1 - Inflector 139
3.8.2 - Strings 140
3.8.3 - XML 140
3.8.4 - Set 141
3.8.5 - Cache 158
3.8.6 - HTTPSocket 159
3.9 - Debugging 160
3.9.1 - debug 160
3.9.2 - Debugger::dump 161
3.9.3 - Debugger::log 161
3.9.4 - Debugger::trace 161
3.9.5 - Debugger::excerpt 162
3.9.6 - Debugger::exportVar 162
3.9.7 - Debugger::invoke 162
3.10 - Logging 162
4 - Localizao e Internacionalizao 162
4.1 - Localizao (l10n) 162
4.1.1 - Extraindo o arquivo POT dos arquivos do projeto 163
4.2 - Internacionalizao (i18n) 166
4.2.1 - Utilizando o behavior Translate 166
5 - Segurana 171
5.1 - Componente de Segurana 171
5.1.1 - Mtodos do componente de Segurana 172
5.1.2 - Uso do componente de segurana 172
5.1.3 - Sistema bsico de autenticao HTTP 173
5.2 - Data Sanitization 174
5.2.1 - Paranoid 1745.2.2 - html 174
Curso de CakePHP da 2km interativa! | www.2km.com.br
3 of 223
7/21/2019 Apostila Curso Cakephp 2km
7/226
5.2.3 - escape 175
5.2.4 - clean 175
6 - Integrando Aplicaes 175
6.1 - Web Services 175
6.1.1 - Utilizando um Web Service REST 176
6.1.2 - Criando um Web Service REST 177
6.2 - Data Sources 180
6.2.1 - Utilizando um Data Source LDAP 181
6.2.2 Criando um Data Source 183
7 - Customizando Componentes 185
7.1 - Behaviors 185
7.1.1 - Criando Behaviors 185
7.2 - Components 187
7.3 - Helpers 188
8 - Ajax no CakePHP 190
8.1 - O Helper Js 190
8.1.1 - Utilizando o mecanismo padro de Javascript (jQuery) 190
8.1.2 - Trabalhando com scripts no bu!er 190
8.1.3 - Mtodos 191
8.1.3.1 - link 191
8.1.3.2 - e!ect 192
8.1.3.3 - object 192
8.1.3.4 - submit 192
8.1.3.5 - drag & drop 192
8.1.3.6 - slider 194
8.1.3.7 - sortable 194
9 - Ajax no CakePHP com a jQuery 195
9.1 - Fazendo o download do helper 195
9.2 - Configurando o helper 196
9.2.1 - Link AJAX 196
9.2.2 - Envio de formulrio por AJAX 196
10 - Testes 197
10.1 - Preparando o Ambiente 197
10.1.1 - Instalando o SimpleTest 197
10.1.2 - Executando o teste de casos Core 19710.2 - Preparando os dados 197
Curso de CakePHP da 2km interativa! | www.2km.com.br
4 of 223
7/21/2019 Apostila Curso Cakephp 2km
8/226
10.2.1 - Sobre fixtures 197
10.2.2 - Criando fixtures 198
10.2.3 - Importando informaes de tabelas e seus registros 199
10.3 - Criando os testes 201
10.4 - Testando as classes de modelos 201
10.4.1 - Criando um teste 201
10.4.2 - Criando um mtodo de teste 202
10.5 - Testando as Classes de Controles 203
10.5.1 - Criando um teste 203
10.5.2 - O mtodo testAction 205
10.5.3 - Pitfalls 205
10.6 - Testando Helpers 206
10.6.1 - Criando teste de Helpers 206
10.7 - Testando Componentes 207
10.7.1 - Iniciando o Componente 207
10.7.2 - Criando o mtodo de teste 208
10.8 - Testando a classe de viso (Web Testing) 208
10.8.1 - Sobre o CakeWebTestCase 208
10.8.2 - Criando um teste 208
10.8.3 - Testando uma pgina 209
10.9 - Testando pluggins 209
10.10 - Gerando Relatrios 210
10.11 - Agrupando Testes 212
11 - O Console do CakePHP 212
11.1 - Conhecendo os shells padres 213
11.1.1 - api 213
11.1.2 - bake 214
11.1.2.1 - Customizando o bake 215
11.1.3 - console 215
11.1.4 - i18n 217
11.1.5 - schema 217
11.1.6 - testsuite 220
11.2 - Criando shells e tasks 221
11.2.1 - Criando um shell customizado 221
11.2.2 - Criando uma task 222
Curso de CakePHP da 2km interativa! | www.2km.com.br
5 of 223
7/21/2019 Apostila Curso Cakephp 2km
9/226
Introduo
Desenvolver um sistema com qualidade, dentro do prazo e custo estipulados um desafio que as empresas dedesenvolvimento de softwaresempre buscaram atender. Uma soluo conhecida para este problema areusabilidade.
Esta consiste em reaproveitar partes do sistema, que j existem e desta forma obter maior produtividade e
qualidade no desenvolvimento. O ganho de qualidade acontece em virtude da reutilizao de partes que jforam testadas previamente em outros trechos do software, ou at mesmo em outras aplicaes. O aumentoda produtividade decorre do reaproveitamento de partes j existentes.
A reusabilidade pode ser feita atravs de cpia de cdigo-fonte, o que no recomendado, pois replicar ocdigo-fonte pode implicar em problemas de manuteno. Por meio de classes, componentes e herana,podendo chegar a um nvel mais alto que so os frameworks.
Um framework uma infra-estrutura ou esqueleto de uma famlia de aplicaes projetado para ser reutilizado.Basicamente, aplicaes especficas so construdas especializando as classes do frameworkpara fornecer aimplementao de alguns mtodos e, assim a aplicao implementa somente as funcionalidades especficas(DEUTSCH, 1989).
As vantagens do uso de frameworksnos projetos, de acordo com Assis (2003) e Sauv (2004) so:
Reduo do tempo de codificao: muitas funcionalidades necessrias j esto disponveis noframework;Solues bem testadas por outras pessoas: Os frameworksso utilizados por muitas pessoas, istogarante um alto nvel de maturidade ao se descobrir erros e adicionar novas funcionalidades;Programadores implementam somente o que necessrio: no preciso que se codifique todo osoftware, pois se utiliza os componentes que j esto prontos;Reduo de erros: os frameworksdiminuem o nmero de linhas de codificao, desta forma, reduzemtambm a possibilidade de erros comuns.
importante destacar a diferena de um frameworkpara uma biblioteca de classes, dentre as diferenas a demaior destaque a forma como o fluxo de execuo controlado. Quando se utiliza uma biblioteca declasses, o programador que define como vai ser a execuo dos comandos. Diferentemente das bibliotecas,os frameworksinvertem este controle de execuo, sendo eles os responsveis por controlar o fluxo da
execuo.
Sobre o CakePHP
CakePHP um frameworkpara desenvolvimento gil, escrito na linguagem PHP. Ele usa padres de projetosconhecidos, como ORM e MVC; utiliza tambm o paradigma das convenes no lugar do uso de configuraes.Este frameworkbusca a reduo do custo de desenvolvimento atravs da diminuio do nmero de linhas decdigo-fonte.
Ele um softwarelivre, licenciado sob a licena MIT - http://www.opensource.org/licenses/mit-license.php.
Vantagens do CakePHP
Dentre os diversos recursos que agregam valor ao utilizar o CakePHP, podemos citar:
Softwarelivre com uma comunidade crescente e ativa.Tem uma licena flexvel (MIT).Compatvel com PHP 4 e 5.Facilidade de gerar a codificao do CRUD.Sca!olding- gerao de telas dinmicas (on the fly).Gerao de cdigo-fonteArquitetura MVCUso de URLs amigveisValidao embutidaTemplates rpidos e flexiveis, utilizando sintaxe PHP
Desenvolvimento de viewscom helpersDiversos componentes disponveis
Curso de CakePHP da 2km interativa! | www.2km.com.br
6 of 223
7/21/2019 Apostila Curso Cakephp 2km
10/226
Lista de controle de acessos (ACL)Proteo contra dados maliciosos (Data Sanitization)Ferramentas para cachingInternacionalizao e LocalizaoFunciona em qualquer servidor webrodando PHP.E o principal: devolve ao programador a diverso de programar.
Curso de CakePHP da 2km interativa! | www.2km.com.br
7 of 223
7/21/2019 Apostila Curso Cakephp 2km
11/226
1 - Instalao
1.1 - Requisitos para Utilizao do CakePHP
O frameworkCakePHP funciona em qualquer servidor web que seja capaz de executar scriptsem linguagemPHP 4 ou superior.
Servidor web: Apache 2.0, LightHTTP, IIS. Sendo recomendado a utilizao do apache com o mdulomod_rewrite.PHP 5.2.6 ou superior. O CakePHP tambm tem suporte para verso 4 PHP.Banco de Dados suportados pelo CakePHP:
MySQL (4 ou superior)PostgreSQLFirebirdMicrosoft SQL ServerOracleSQLiteODBCADOdb
1.2 - Configurando o Apache
O servidor web Apache um softwarelivre mantido pela organizao Apache Foundation. O servidor Apache o servidor mais utilizado para hospedar pginas na internet.
O CakePHP pode ser configurado de diversas maneiras no servidor Apache, este captulo ir apresentar asdiferentes formas de configurao, destacando seus prs e contras.
O arquivo de configurao do Apache o httpd.conf. Este arquivo encontrado nos sistemas *nix dentro dodiretrio /etc/apache2/. No windows o arquivo ser encontrado dentro do diretrio "conf", geralmentelocalizado no diretrio de instalao do Apache.
1.2.1 - Configurando o mod_rewrite
Este mdulo utilizado para criar endereos (URLs) mais amigveis, evitando endereos longos com diversos&. Por exemplo:
Nota
O endereo: http://www.dominio.com.br/index.php?nome=teste&data=20081110. Utilizando areescrita de URL poderia ser escrito assim: http://www.dominio.com.br/teste/20081110
Para habilitar o mdulo rewriteno servidor apache basta descomentar* a seguinte linha:
#LoadModule rewrite_module modules/mod_rewrite.so
Observao: O caminho do mdulo pode alterar dependendo da instalao do Apache ou do sistemaoperacional.
Nota
*comentrios no arquivo de configurao so as linhas que comeam com #
1.2.2 - Configurando um endereo por meio de alias
As configuraes de aliasno apache so utilizadas para gerar endereos como:
Curso de CakePHP da 2km interativa! | www.2km.com.br
8 of 223
7/21/2019 Apostila Curso Cakephp 2km
12/226
http://dominio/nome_do_alias
Para criar um aliasno apache necessrio editar o arquivo httpd.conf inserindo as seguintes linhas:
Alias /projetos /projetos/cakephp/
Options Indexes FollowSymLinksAllowOverride AllOrder allow,denyAllow from All
A primeira linha indica o nome do alias, sendo este nome utilizado no endereo aps o domnio. A seguir inserido o endereo fsico do site.
As prximas linhas passam algumas configuraes do aliaspara o apache. Sendo importante observar quepara o mdulo rewritefuncionar neste alias necessrio deixar a opo AllowOverridecom o valor All.
Neste exemplo foi configurado um aliaschamado projetos; isto significa, que ao fazer uma requisio noendereo: http://localhost/projetos, o servidor Apache envia a pgina principal (index) de projetos encontradano diretrio /projetos/cakephp/. Alm disto, este aliasest com a opo de reescrever a url ativada (mdulorewrite + allowOverride All), sendo assim o servidor procura a existncia do arquivo .htaccess no diretriosolicitado e executa as regras escritas nele.
1.2.3 - Configurando um endereo usando virtual host
O recurso de hostvirtual utilizado para configurar diversos endereos em uma mesma mquina, com um oumais endereos IPs.
O uso do virtual hostna mquina de desenvolvimento aconselhvel, pois simula o ambiente de produo epode reduzir problemas com alguma configurao adicional do mod_rewrite.
Para habilitar e configurar o hostvirtual necessrio seguir os seguintes passos:
Abrir o arquivo httpd.conf e descomentar a linha:
#LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
1.
No arquivo httpd.conf, descomentar tambm a linha:
#Include /private/etc/apache2/extra/httpd-vhosts.conf
2.
Editar o arquivo extra/httpd-vhosts.conf
NameVirtualHost *
ServerName projetos DocumentRoot /projetos/cakephp/ ErrorLog /var/log/apache2/projetos-error_log CustomLog /var/log/apache2/projetos-access_log combined Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all
3.
Curso de CakePHP da 2km interativa! | www.2km.com.br
9 of 223
7/21/2019 Apostila Curso Cakephp 2km
13/226
ServerName localhost DocumentRoot /projetos/sistemaslegados/ ErrorLog /var/log/apache2/sistemaslegados-error_log CustomLog /var/log/apache2/sistemaslegados-access_log combined
Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all
Listagem 1 - Configurao do arquivo httpd-vhosts.conf
Editar o arquivo hosts:
Caminho no *nix: /etc/hosts
Caminho no windows: C:\Windows\system32\drivers\etc\hosts
127.0.0.1 localhost127.0.0.1 projetos
Listagem 2 - Configurao do arquivo hosts
4.
Reiniciar o servidor Apache5.
A configurao mostrada acima cria dois hostsvirtuais - localhost e projetos. Ao acessar http://localhost/no browser, o servidor apache ir direcionar para o contedo da pasta: /projetos/sistemaslegados/. Aoacessar http://projetos/, o Apache direciona para o contedo da pasta: /projetos/cakephp/.
O virtual hostpode ter configurao de logindependente para cada host, sendo que os arquivos responsveisem armazenar a informao do logpodem ser indicados pelos parmetros: ErrorLoge CustomLog
1.2.4 - Configurando o mod_userdir
O mdulo de usurio habilita cada usurio do sistema operacional a ter seu prprio site. Ao utilizar estemdulo o endereo do site fica assim: http://dominio/~usuarioDoSistema/
Para habilitar este mdulo basta descomentar a linha:
#LoadModule userdir_module libexec/apache2/mod_userdir.so
Listagem 3 - Configurao do mdulo userdir_moduleno arquivo httpd.conf
1.2.5 - Comparando as configuraes do Apache
Os desenvolvedores do CakePHP recomendam o uso do mdulo rewrite. Este mdulo procura sempre umarquivo chamado .htaccesse verifica suas regras.
No CakePHP existem trs arquivos .htaccessque ficam localizados nos diretrios:
/CAMINHO_DO_CAKE/.htaccess/CAMINHO_DO_CAKE/app/.htaccess/CAMINHO_DO_CAKE/app/webroot/.htaccess
Dependendo da configurao do Apache utilizada necessrio editar estes trs arquivos .htaccess.
No caso de utilizar a configurao de sua aplicao com uso de alias, deve-se adicionar a seguinte linha emseu .htaccess:
Curso de CakePHP da 2km interativa! | www.2km.com.br
10 of 223
7/21/2019 Apostila Curso Cakephp 2km
14/226
RewriteEngine on RewriteBase /NOME_DO_ALIAS/
#Por exemplo: RewriteBase /projetos/ RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L]
Listagem 4 - Configurao do .htaccessutilizando alias
No mdulo userdirtorna-se necessrio editar o arquivo .htaccessna seguinte linha:
RewriteBase /~NOME_DO_USUARIO/
Listagem 5 - Configurao do .htaccessutilizando mod_userdir
A configurao por meio de hostvirtual dispensa a configurao dos arquivos .htaccess, porm seus hostsvirtuais no so acessveis para outros computadores da rede.
1.3 - Instalando o CakePHP
O primeiro passo para a instalao do framework fazer o seu downloadno seguinte endereo:
Na pgina principal do projeto existe um link para a ltima verso estvel:
http://www.cakephp.com.br
Aps o downloaddos fontes, necessrio descompactar o arquivo na pasta desejada.
O servidor web deve ser configurado para o diretrio onde o CakePHP foi extrado. Por exemplo:
O CakePHP est na pasta: C:\projetos\cakephp\
Sendo o contedo de C:\projetos\cakephp\as pastas app, cakee vendors.
O servidor web deve ser configurado para o diretrio: C:\projetos\cakephp\
Nota
A verso do framework CakePHP utilizada neste material a verso estvel 1.3.10.
1.4 - Estrutura de diretrios
Aps descompactar o arquivo baixado pelo site do CakePHP, a seguinte estrutura encontrada:
Diretrio Descrio
/app/ Aqui ficam os arquivos da aplicao que ser desenvolvida.
/app/config/ Onde ficam os arquivos de configurao.
O arquivo de configurao de banco de dados (database.php) se encontra aqui.
/app/controllers As classes da camada de controle devem ser escritas neste diretrio.
Curso de CakePHP da 2km interativa! | www.2km.com.br
11 of 223
7/21/2019 Apostila Curso Cakephp 2km
15/226
Diretrio Descrio
/app/libs Contm as bibliotecas primrias que no vieram de terceiros ou empresasexternas. Isto permite que voc separe suas bibliotecas internas das biliotecas defornecedores.
/app/locale Contm os arquivos com as strings para a internacionalizao.
/app/models As classes da camada de modelo devem ser escritas neste diretrio.
/app/views Os arquivos da camada de viso devem ser escritas neste diretrio.
/cake/ Os arquivos do frameworkficam neste diretrio.
O desenvolvedor no deve alterar o contedo desta pasta, somente se souber oque est fazendo.
/app/webroot/ Todas as requisies so direcionadas para este diretrio, que contm o arquivoindex.php (o Dispatcher) que trata quais arquivos so necessrios para atendercada requisio.
As pastas deste diretrio servem como abrigo para arquivos css, imagens,javascripts e qualquer outro arquivo que precisa estar disponvel para arequisio.
Tabela 1 - Estrutura de diretrios do CakePHP
1.5 - Arquivos de configurao do CakePHP
O CakePHP possui poucos arquivos de configurao, devido sua arquitetura baseada em convenes.
1.5.1 - O arquivo de configurao ddaattaabbaassee..pphhpp
Para iniciar o desenvolvimento de uma aplicao, necessrio apenas configurar o banco de dados por meiodo arquivo: diretrio_do_cake/conf/database.php.
O banco de dados configurado pelo array: $default, que ilustrado abaixo.
var $default = array( 'driver' => 'mysql',
'persistent' => false, 'host' => 'localhost', 'login' => 'cakephpuser', 'password' => 'c4k3roxx!', 'database' => 'my_cakephp_project', 'prefix' => '' );
Listagem 6 - Configurao do arquivo database.php
Segue abaixo a listagem de configuraes do array de conexo com o banco de dados.
Chave Descrio
Curso de CakePHP da 2km interativa! | www.2km.com.br
12 of 223
7/21/2019 Apostila Curso Cakephp 2km
16/226
Chave Descrio
driver Define qual driver de banco de dados ser usado na aplicao, sendo possvelescolher as opes:mysql, postgres, sqlite, pear-nomeDoDriver, adodb-nomeDoDriver, mssql, oracle, or odbc.
persistent Define se a conexo ao banco de dados deve ser feita de forma persistente ouno.
host O endereo do computador onde o SGBD est instalado.
login Usurio que possui acesso ao banco de dados.
password Senha do usurio para acesso ao banco de dados.
database Nome do banco de dados que ser utilizado.
prefix Chave opcional que, deve ser configurada caso as tabelas do banco de dadosutilizem algum prefixo.
port Chave opcional, porta TCP para conexo com o banco de dados.
encoding Tipo de caracteres que sero utilizados na conexo, por default a maioria dosbancos de dados utilizam UTF-8.
schema Usado apenas pelo PostgreSQL para definir qual esquema usar.
Tabela 2 - Chaves disponveis para a configurao com o banco de dados no arquivo database.php
1.5.2 - O arquivo de configurao ccoorree..pphhpp
O arquivo core.phppossui as configuraes bsicas do framework. Confira abaixo as suas opes deconfigurao:
Varivel Descrio
debug Configura o nvel de mensagens de debug que ser mostrado na tela.
0= Modo sem nenhuma mensagem, para uso do sistema em produo.1= Mostra mensagens de erros e advertncias.2= Mostra mensagens de erros, advertncias e comandos SQL.3= Mostra mensagens de erros, advertncias, comandos SQL e variveis docontrole.
App.baseUrl Descomente esta linha caso deseje utilizar o CakePHP sem o mod_rewrite. importante apagar todos os arquivos .htaccessNo IIS pode ser necessrio colocar uma ? concatenada, como demonstrado abaixo:Configure::write('App.baseUrl', env('SCRIPT_NAME')."?");
Routing.prefixes Descomente a linha para utilizar as rotas administrativas.
Por default o nome da rota administrativa admin, podendo ser alterada paraqualquer outra palavra.
Curso de CakePHP da 2km interativa! | www.2km.com.br
13 of 223
7/21/2019 Apostila Curso Cakephp 2km
17/226
Cache.disable Quando definido como true, o cacheser desabilitado para toda a aplicao.
Cache.check Quando o valor verdadeiro, o recurso de cachena viso habilitado.Para usar cacheainda necessrio configurar as classes de controle.
Session.save Configura de qual forma as sesses sero armazenadas.
php= usa o padro do PHP.cake= os dados de sesso so armazenados no diretrio /app/tmpdatabase= os dados sero armazenado em uma tabela do banco de dados, parautilizar este recurso necessrio criar a tabela. O script SQL para criao encontrado em: /app/config/sql/sessions.sql.
Session.table Nome da tabela que o CakePHP utilizar para gravar informaes da sesso.
Session.database Nome do banco de dados usado para gravar informaes da sesso.
Session.cookie Nome do cookieusado para as sesses.
Session.timeout Tempo de durao de uma sesso (em segundos).Este valor depende da configurao do Security.level.
Session.start O frameworkinicia uma sesso automaticamente quando este parmetro verdadeiro.
Session.checkAgent Quando esta configurao falsa o CakePHP no verifica a varivel$_SERVER["HTTP_USER_AGENT"], ou seja no existe uma verificao se a requisioesta sendo feita pelo mesmo agente (mesmo navegador).
Security.level Nvel de segurana do CakePHP. O valor definido em 'Session.timeout' multiplicado pelo peso do nvel de segurana definido abaixo:
Valores vlidos:'high' = x 10'medium' = x 100'low' = x 300
Os valores 'high' e 'medium' tambm habilitam a configurao de sesso do php:
session.referer_check
O ID da sesso do CakePHP recriado entre as requisies, quando 'Security.level' 'high'.
Security.salt Uma string aleatria, usada para a tabela hashde segurana.
Security.cipherSeed Uma string numrica (somente dgitos) utilizada para criptografar/descriptografarstrings.
Acl.classname,Acl.database
Constantes utilizadas pelo recurso de Access Control List(ACL, ou lista de controlede acessos).
Tabela 3 - Configuraes do frameworkno arquivo core.php
1.5.3 - O arquivo de configurao bboooottssttrraapp..pphhppEste arquivo de configurao pode ser utilizado para:
Registrar constantes globaisCriar funes utilitriasDefinir caminhos adicionais para as classes de modelo, classes de controle e pginas da viso
O arquivo bootstrap.php carregado na inicializao da aplicao.
Um exemplo prtico de uma funo que pode ser codificada no bootstrap.phpseria a funo abaixo, queimprime o contedo do array passado como parmetro e logo depois executa o die(), que interrompe aexecuo do script. Este um mtodo que pode auxiliar no debugda aplicao.
/*
Curso de CakePHP da 2km interativa! | www.2km.com.br
14 of 223
7/21/2019 Apostila Curso Cakephp 2km
18/226
* Funo para imprimir o contedo passado como parmetro e terminar a execuo doscript*/function prd($message){ die(pr($message));}
Listagem 7 - Funo que pode ser codificada no arquivo bootstrap.php
Nota
A funo pr()no cake um aliaspara a funo print_r()nativa do PHP.
1.6 - Instalao Avanada do CakePHP
A instalao avanada do CakePHP consiste em separar o frameworkda aplicao, desta forma possvel teruma nica instalao do CakePHP para diversas aplicaes.
O primeiro passo mover a pasta do framework: /CAMINHO_DO_CAKE/cakepara o diretrio desejado. Porexemplo: C:\cake\, desta forma a pasta ficaria C:\cake\cake\(arquivos e pastas do framework).
Nos sistemas *nix recomendado usar a pasta /usr/lib/, logo, deve-se criar o diretrio /usr/lib/cakeemover a pasta cake para o novo diretrio, desta forma ficaria: /usr/lib/cake/cake/(arquivos e pastas doframework)
Como a pasta do frameworkfoi movida para outro local, o CakePHP precisa ser configurado com o novoendereo. Para isto precisamos editar a seguinte linha do arquivo
/CAMINHO_DO_CAKE/app/webroot/index.php:
if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
Listagem 8 - Configurao original do caminho para o frameworkno arquivo/CAMINHO_DO_CAKE/app/webroot/index.php
Deixando desta forma:
//WINDOWSif (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', 'C:'.DS.'cake');}/*---------------------------------------------------------------------------------*/
//*nixif (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}
Listagem 9 - Configurao alterada do caminho para o frameworkno arquivo/CAMINHO_DO_CAKE/app/webroot/index.php
Pronto!!! A aplicao est funcionando separada do framework.
Outra opo seria separar a pasta webrootda sua aplicao. As aplicaes, no ambiente de produo, devemser configuradas desta forma.
Neste caso necessrio configurar as seguintes linhas do arquivo
/CAMINHO_DO_CAKE/app/webroot/index.php:
Curso de CakePHP da 2km interativa! | www.2km.com.br
15 of 223
7/21/2019 Apostila Curso Cakephp 2km
19/226
//Caminho para sua aplicaoif (!defined('ROOT')) {
define('ROOT', dirname(dirname(dirname(__FILE__))));}//nome da pasta da sua aplicaoif (!defined('APP_DIR')) {
define('APP_DIR', basename(dirname(dirname(__FILE__))));}
Listagem 10 - Configurao original do arquivo /CAMINHO_DO_CAKE/app/webroot/index.php
Como exemplo real vamos sugerir a seguinte configurao, para um sistema de bookmarks:
Biblioteca do framework: /usr/lib/cake/A aplicao: /home/usuario/bookmarks/O webroot: /var/www/htdocs/(Este diretrio deve ser o Document Rootda configurao do Apache)
A configurao necessria seria:
//Caminho para sua aplicao
if (!defined('ROOT')) {define('ROOT', DS.'home'.DS.'usuario');
}//nome da pasta da sua aplicaoif (!defined('APP_DIR')) {
define('APP_DIR', 'bookmarks');}//caminho da biblioteca do frameworkif (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS."usr".DS."lib".DS."cake");}
Listagem 11 - Configurao alterada do arquivo /CAMINHO_DO_CAKE/app/webroot/index.php
2 - Desenvolvendo com o CakePHP
O CakePHP utiliza o paradigma de desenho de softwareda Conveno ao invs da Configurao (em inglsConvention over Configurationou simplesmente Coding by convention). Este paradigma procura diminuir onmero de decises que os desenvolvedores precisam tomar, ganhando em simplicidade, mas nonecessariamente perdendo flexibilidade.
2.1 - Convenes no CakePHP
Apesar de tomar um pouco de tempo para aprender as convenes do CakePHP, voc ganha tempo em umlongo processo: seguindo as convenes, voc ganha funcionalidades gratuitamente e livra-se de madrugadasde manuteno de arquivos de configurao. Convenes tambm fazem com que o sistema fiqueuniformemente desenvolvido, permitindo que outros desenvolvedores o ajudem mais facilmente.
As convenes no CakePHP tm sido produzidas por anos de experincia em desenvolvimento web e boasprticas. Apesar de sugerimos que voc use essas convenes enquanto desenvolve em CakePHP, devemosmencionar que muitos desses princpios so facilmente sobrescritos - algo que especialmente acontecequando trabalha-se com sistemas legados.
2.1.1 - Convenes para nome de arquivos e nome de classes
Na maioria das vezes, o nome dos arquivos utiliza underscores, enquanto o nome das classes utiliza o padroCamelCase, ou seja, a primeira letra de cada palavra em maisculo. A classe LinksUteisController pode ser
encontrada no arquivo links_uteis_controller.php, por exemplo.
Curso de CakePHP da 2km interativa! | www.2km.com.br
16 of 223
7/21/2019 Apostila Curso Cakephp 2km
20/226
Em alguns casos o nome da classe e o seu tipo no fazem parte do nome do arquivo. A classeCookieComponent pode ser encontrada no arquivo cookie.phpe a classe SecurityComponent pode serencontrada no arquivo security.php
2.1.2 - Convenes para a camada de modelo e banco de dados
Os nomes dos arquivos devem ser singular e separados por um underscorecaso tenha mais de uma palavra.Ex.: usuario.php, saida_produto.php.
Os nomes das classes de modelo devem ser singular e CamelCased. Ex.: Usuario, SaidaProduto.
As tabelas de banco de dados devem estar no plural e com underscorecaso tenha mais de uma palavra. Ex.:usuarios, saida_produtos.
A chave primria deve ter o nome id. Chaves estrangeiras devem ter o nome da tabela relacionada no singulare acrescentar no final _id. Logo se grupos tm usurios, na tabela usuarios deve existir o campo grupo_id.
Tabelas de ligao, utilizadas em relacionamento de N-M, devem possuir o nome das duas tabelas ligadas noplural separadas por underscoree em ordem alfabtica. Ex.: usuarios HABTM produtos -> produtos_usuarios
2.1.3 - Convenes para a camada de controle
Os arquivos da camada de controle devem seguir o padro:
Os nomes das classes de controle so no plural, CamelCased e sempre terminam em 'Controller'. Ex:UsuariosController, FuncionariosController e TerceirosController so alguns exemplos de controllers.
Curso de CakePHP da 2km interativa! | www.2km.com.br
17 of 223
7/21/2019 Apostila Curso Cakephp 2km
21/226
Nota
O primeiro mtodo que voc deve escrever em uma clase de controle o mtodo index().Quando algum requisita um controllersem ao, o comportamento padro renderizar omtodo index()do controller. Por exemplo, a requisio parahttp://www.exemplo.com.br/usuariosmapeia para a chamada do mtodo index()doUsuariosController, assim como http://www.exemplo.com.br/usuarios/viewmapeia para achamada do mtodo view()no UsuariosController.
Voc tambm pode alterar a visibilidade dos mtodos da classe de controle, para isto, basta colocar umunderscorena frente do nome dos mtodos. Se o mtodo da classe de controle estiver com underscorenafrente, o mtodo no ser disponibilizado para acesso webatravs do Dispatcher, mas estar disponvel parauso interno. Por exemplo:
Listagem 12 - Exemplo de um mtodo privado
Apesar da pgina http://www.dominio.com.br/noticias/ultimas/possa ser acessada pelo usurionormalmente, algum que tente acessar a pginahttp://www.dominio.com.br/noticias/_ultimasNoticias/receber um erro porque o mtodo precedido de um underscore.
Como voc acabou de ver, controllersde uma nica palavra so mapeados facilmente para uma URL simplesem letras minsculas. Por exemplo, a classe UsuariosController (que seria definida em um arquivo de nome
usuarios_controller.php) acessada a partir da URL http://www.dominio.com.br/usuarios.
Controllersde com muitas palavras so mapeados para URLs em camelBackedmantendo a forma plural. Porexemplo, UsuariosLegadosController ( usuarios_legados_controller.php) seria mapeado parahttp://www.dominio.com.br/usuariosLegadose SistemasExternosController
( sistemas_externos_controller.php) seria mapeado parahttp://www.dominio.com.br/sistemasExternos.
2.1.4 - Convenes para a camada de viso
Os arquivos da camada de viso devem ser nomeados depois dos mtodos dos controllers. Os arquivos dacamada de viso devem ser escritos com underscores. O mtodo getReady() da classe PeopleController irprocurar pela viso /app/views/people/get_ready.ctp.
O modelo bsico /app/views/nome_do_controller/nome_da_funcao_com_underscore.ctp.
Nomeando os pedaos da aplicao usando as convenes do CakePHP, voc ganha funcionalidades sem luta esem amarras de configurao. Aqui o exemplo final que vincula as associaes:
Tabela no banco de dados: 'people'Classe do Modelo: 'Person', encontrada em /app/models/person.php
Curso de CakePHP da 2km interativa! | www.2km.com.br
18 of 223
7/21/2019 Apostila Curso Cakephp 2km
22/226
Classe do Controlador: 'PeopleController', encontrado em /app/controllers/people_controller.phpTemplate da Viso: encontrado em /app/views/people/index.ctp
Usando estas convenes, CakePHP sabe que a requisio para http://www.exemplo.com.br/people/ mapeiapara a chamada do mtodo index() do PeopleController, onde o modelo Person automaticamentedisponibilizado (e automaticamente associado tabela 'people' no banco de dados), e renderiza isso para oarquivo. Nenhuma destas relaes foram configuradas por qualquer meio que no seja atravs da criao declasses e arquivos que voc precise criar em algum lugar.
2.1.5 - Todas as Convenes
Local Regra Exemplo
Banco dedados
Nome das tabelas: plural, minsculo. usuarios, posts, artigos
Banco dedados
Chave primria: nome id, tipo int, auto_increment id int(11)
Banco dedados
Nome dos campos: minsculo, usando underscore. nome, rua, data_de_nascimento
Banco dedados
Chave estrangeira: nome da tabela relacionada no singular,acrescentando underscoree id.
cliente_id,grupo_id
Banco dedados
Relacionamento N-M (HABTM), regra para a tabela deligao: nome das tabelas em ordem alfabtica, separadaspor underscore.
produto_usuario, grupo_usuario
Modelo Nome do arquivo: singular e CamelCase usuario.php, grupo.php,cliente.php
Modelo Nome da classe: singular e CamelCase Usuario, Grupo
Controle Nome do arquivo: plural, underscorese terminado comController
usuarios_controller.php,grupos_controller.php
Controle Nome da classe: plural, CamelCase e terminado com
Controller
UsuariosController,
GruposControllerViso Local do arquivo: dentro da pasta views/nome_do_controle/ views/usuarios/, views/grupos/
Viso Nome do arquivo: deve ter o nome da ao do controle, comunderscores.
views/usuarios/index.ctp,views/grupos/add.ctp
Tabela 4 - Lista de todas as convenes do CakePHP
2.2 - Constantes
As constantes listadas abaixo so utilizadas no CakePHP:
Constante Descrio
APP Diretrio raiz.
APP_PATH Diretrio app.
CACHE Diretrio dos arquivos de cache.
CAKE Diretrio do cake.
Curso de CakePHP da 2km interativa! | www.2km.com.br
19 of 223
7/21/2019 Apostila Curso Cakephp 2km
23/226
Constante Descrio
COMPONENTS Diretrio components.
CONFIGS Diretrio dos arquivos de configurao.
CONTROLLER_TESTS Diretrio de testes do controlador.
CONTROLLERS Diretrio dos controllers.
CSS Diretrio dos arquivos CSS.
ELEMENTS Diretrio dos elements.
HELPER_TESTS Diretrio de testes do helper.
HELPERS Diretrio helpers.
IMAGES Diretrio das imagens.
INFLECTIONS Diretrio inflections (geralmente dentro do diretrio de configurao).
JS Diretrio dos arquivos JavaScript (no webroot).
LAYOUTS Diretrio layouts.
LIB_TESTS Diretrio de testes da biblioteca do CakePHP.
LIBS Diretrio das bibliotecas do CakePHP.
LOG_ERROR Constante de Erro. Utilizada para diferenciar erro de log e debug. Atualmente oPHP suporta LOG_DEBUG.
LOGS Diretrio logs (no app).
MODEL_TESTS Diretrio de testes do modelo.
MODELS Diretrio models.
SCRIPTS Diretrio de scripts do Cake.
Curso de CakePHP da 2km interativa! | www.2km.com.br
20 of 223
7/21/2019 Apostila Curso Cakephp 2km
24/226
Constante Descrio
TESTS Diretrio de testes (pai dos diretrios de teste modelos, controles, etc.)
TMP Diretrio tmp.
VENDORS Diretrio vendors.
VIEWS Diretrio views.
WWW_ROOT Caminho completo para o webroot.
Tabela 5 - Lista das constantes no CakePHP
2.3 - A Arquitetura MVC
A medida que os softwaresforam ficando maiores e mais complexos, tornou-se necessrio organizar ocdigo-fonte de forma a facilitar o seu entendimento.
Uma soluo criada para este problema foi a diviso da aplicao em 3 camadas com funcionalidades distintas,est soluo denominada arquitetura MVC (Model - View - Controller).
Basicamente a arquitetura MVC separa o desenvolvimento da aplicao em:
Camada de Modelo: parte da programao destinada ao tratamento dos dados.Camada de Controle: responsvel pelas regras de negcioCamada de Viso: responsvel pelo o que apresentado para o cliente
A seguir, apresentado o fluxo de execuo de uma requisio feita ao CakePHP.
Curso de CakePHP da 2km interativa! | www.2km.com.br
21 of 223
7/21/2019 Apostila Curso Cakephp 2km
25/226
Imagem 1 - Fluxo da execuo de uma requisio no CakePHP
Os passos da requisio podem ser descritos da seguinte forma:
O cliente* faz uma requisio ao endereo http://www.exemplo.com.br/clientes/indexO servidor de pgina encaminha a requisio para o Dispatcher.O Dispatcher verifica as regras de rotas.O frameworkexecuta o controllere a ao informados na requisio.Durante a execuo da ao do controllerso feitas requisies a camada de modelo.Ao final da execuo uma view renderizada.
Nota
O cliente quem faz a requisio, ele pode ser um browser, um computador, etc.
2.3.1 - A camada de modelo
Essa camada responsvel por representar dados. Ela utilizada para fornecer acesso aos dados, que podemestar armazenados em um banco de dados, um arquivo texto, um arquivo CSV, dentre outras possibilidades.De forma mais usual, geralmente um modelo especfico representa uma tabela de um banco de dados.
Assim como podemos fazer relacionamentos entre tabelas em um banco de dados, um modelo tambm pode
estabelecer esses relacionamentos entre modelos. Existem quatro tipos de relacionamento entre modelos:hasOne, hasMany, belongsTo ou hasAndBelongsToMany. Esses relacionamentos sero vistos com mais detalhe
Curso de CakePHP da 2km interativa! | www.2km.com.br
22 of 223
7/21/2019 Apostila Curso Cakephp 2km
26/226
no tpico 2.3.1.2 - Associando os modelos. Como exemplo prtico de relacionamento entre modelospodemos citar a tabela Marca de Carro que possui relacionamento do tipo HasMany com a tabela Carros.
Em programao orientada a objeto podemos dizer que um modelo um objeto que representa algo darealidade. Em outras palavras, um modelo pode ser a representao de uma televiso ou uma cama ouqualquer outro objeto. Para se definir um modelo no CakePHP deve se fazer o seguinte:
Como se pode ver, neste exemplo, a classe Cliente herda da classe AppModel que por sua vez herda da classeModel. A princpio a classe AppModel est vazia. Ela existe para que seja possvel gerar determinadoscomportamentos comuns a todos os modelos.
2.3.1.1 - Atributos dos modelos
2.3.1.1.1 - useDbConfig
A propriedade useDbConfigdefine, atravs de uma string, o nome da conexo com o banco de dados. Porpadro a conexo que o CakePHP usa definida no arquivo app/config/database.php e tem o valor default. necessrio criar o array no arquivo database.phpcom os dados da conexo. Veja o exemplo a seguir:
Listagem 13 - Cdigo no arquivo app/config/database.php
7/21/2019 Apostila Curso Cakephp 2km
27/226
}?>
Listagem 14 - Cdigo no arquivo do modelo
Importante
Se voc estiver utilizando dois ou mais bancos de dados na sua aplicao, certifique-se deutilizar contas de usurios diferentes para cada banco, pois no PHP se voc utiliza a mesmaconta para acessar bancos diferentes no mesmo servidor o PHP ir reutilizar a conexo.
2.3.1.1.2 - useTable
Este atributo define o nome da tabela que o modelo utilizar, somente existir a necessidade de atribuir umvalor, caso no esteja sendo utilizada as convenes. Se o modelo no necessitar usar tabela alguma, pode-seutilizar essa propriedade com o valor false.
Listagem 15 - Exemplo de um model que no utiliza tabela
Listagem 16 - Exemplo de um model que utiliza tabela
2.3.1.1.3 - tablePrefix
Este atributo utilizado para definir o prefixo de alguma tabela. Por padro nenhum prefixo definido.Pode-se tambm definir o prefixo no arquivo app/config/database.php, entretanto se for usadotablePrefix no model, essas definies sobrescrevem as definies definidas no
app/config/database.php.
Listagem 17 - Exemplo de uso da tablePrefix:
2.3.1.1.4 - primaryKey
Usualmente toda tabela possui o campo id definido como chave primria. Entretanto, existem casos onde atabela pode no possuir um campo id, ou pretende-se usar outro campo como chave primria. Neste casousamos o atributo primaryKey para definir qual campo funcionar dessa forma.
7/21/2019 Apostila Curso Cakephp 2km
28/226
}?>
Listagem 18 - Exemplo de uso da primaryKey:
2.3.1.1.5 - displayField
O displayField define qual campo da tabela ser usado como rrulo (label). Esse rtulo usado quando seutiliza sca!olding e find('list'). Por padro a camada de modelo usa os campos name ou title. No se pode usarmais que um valor para displayField. Portanto, no funcionar utilizar var $displayField = array('valor1','valor2').
Listagem 19 - Exemplo de uso da displayField:
2.3.1.1.6 - recursive
Recursive utilizado quando o modelo possui relacionamento com outros modelos. Atravs dessa propriedadepode-se definir at onde o modelo deve trazer os relacionamentos quando existem chamadas para as funesfind e read.
Como exemplo prtico, imagine uma aplicao onde uma universidade possui diversos cursos, estes pussuemdisciplinas, que tm professores. Logo, Universidade HasMany Curso; Curso HasMany Disciplina; DisciplinaHasMany Artigo. Ao fazer uma busca na entidade Curso ($this->Curso->Find()), a busca pode se comportardas seguintes formas:
Profundidade Descrio
-1 Cake procura somente os cursos.
0 Cake procura por cursos e a universidade ao qual os cursos pertencem.
1 Cake procura por cursos, universidades e disciplinas associados.
2 Cake procura por cursos, universidade, disciplinas associados e os professoresassociados aos produtos.
Tabela 6 - Valores possveis para a varivel recursive
2.3.1.1.7 - order
Define qual a ordem que os resultados das pesquisas feitas com find vo retornar. Pode ter o valor ASC, DESC,pode-se tambm ordenar por um campo, ou por um Modelo.campo. possvel ainda utilizar um array commais de um critrio de ordenao.
var $order = "nome";var $order = "Cliente.nome";var $order = "Cliente.nome asc";var $order = "Cliente.nome ASC";
var $order = "Cliente.nome DESC";
Curso de CakePHP da 2km interativa! | www.2km.com.br
25 of 223
7/21/2019 Apostila Curso Cakephp 2km
29/226
var $order = array("Cliente.nome" => "asc", "Cliente.email" => "DESC")
Listagem 20 - Exemplos de uso de order
2.3.1.1.8 - data
Neste atributo armazenado todos os dados retornados em uma pesquisa. Esses dados so armazenados emforma de arrays multidimensionais, que possuem os nomes dos campos como ndices dos arrays.
2.3.1.1.9 - _schema
Este atributo armazena informaes dos campos das tabelas do banco de dados. Cada campo armazena o seunome, o tipo de dado que ele armazena (boolean, string, datetime, dentre outros), se permite valor null, ovalor padro que o campo recebe e o tamanho.
pr($this->Model->schema());//retornavar $_schema = array(
'Nome' => array('type' => 'string', 'length' => 30),'Email' => array('type' => 'string', 'length' => 30),'Tel' => array('type' => 'int', 'length' => 10),'Comentrio' => array('type' => 'text')
);
Listagem 21 - Exemplos de uso de _schema:
2.3.1.1.10 - validate
Atravs deste atributo possvel ao modelo fazer validaes antes de armazenar os dados no banco de dadosou onde estes dados forem armazenados.
7/21/2019 Apostila Curso Cakephp 2km
30/226
Chave Descrio
Rule Regra de validao do campo
Required O campo precisa ter dados
allowEmpty O campo aceita valor vazio
on Define em qual lugar a validao deve ser feita. 'on'=>'create' ou 'on'=>'update'
message Define a mensagem que ser apresentada, caso o campo no passe na validao
Tabela 7 - Parmetros do validate
Regras padres de validao do CakePHP
Regra Validao
alphaNumericPara o campo ser vlido ele deve conter apenas caracteres alfanumricos.
array('login' => array('rule' => 'alphaNumeric'));
betweenO campo pode ter qualquer caracter, mas o tamanho do contedo do campo estar entre afaixa determinada.
array('senha' => array('rule' => array('between',6,8)));
blankO campo deve estar em branco.
array('id' => array('rule' => 'blank', 'on'=>'create'));
booleanO campo deve ser um boleano vlido.
array('flag' => array('rule' => 'boolean'));
ccO campo deve ser um carto de crdito.
array('cartao' => array('rule' => array('cc',array('visa','maestro'))));
comparison
Compara um valor inteiro, a comparao pode ser maior que (>), menor que (=), menor ou igual( array('rule' => array('comparison','>',20)));
dateO campo precisa ser uma data vlida.
array('data_inicio' => array('rule' => 'date'));
decimalO campo precisa ser um nmero decimal.
array('preco' => array('rule' => array('decimal',2)));
emailO campo precisa ser um email.
array('email' => array('rule' => 'email'));
Curso de CakePHP da 2km interativa! | www.2km.com.br
27 of 223
7/21/2019 Apostila Curso Cakephp 2km
31/226
Regra Validao
equalToO campo precisa ser igual ao valor informado.
array('nome' => array('rule' => array('equalTo','jos')));
extension O arquivo precisa ser da extenso especificada.array('arquivo' => array('rule' => array('extension',array('jpg','gif'))));
fileO campo precisa ser um arquivo (upload).
array('documento' => array('rule' => 'file'));
ipO campo precisa ser um ip (verso 4).
array('client_ip' => array('rule' => 'ip'));
isUniqueO campo deve ser nico no banco de dados.
array('flag' => array('rule' => 'isUnique'));
minLengthO campo precisa ter o tamanho mnimo informado.
array('senha' => array('rule' => array('minLength',8)));
maxLengthO campo precisa ter o tamanho mximo informado.
array('nome' => array('rule' => array('maxLength',32)));
moneyO campo precisa ser um valor financeiro.
array('valor_da_compra' => array('rule' => 'money'));
Multiple
Verifica campos select multiple.
array('tags' => array('rule' => array('multiple', array('in'=>array('teste', outro teste),'min'=>1, 'max'=>3))));
inListO campo precisa estar na lista informada.
array('grupos' => array('rule' => array('inList', array('Admin','Usuario'))));
numericO campo precisa ser um nmero vlido.
array('valor' => array('rule' => 'numeric'));
notEmptyO campo no pode ser vazio.
array('texto' => array('rule' => 'notEmpty'));
Curso de CakePHP da 2km interativa! | www.2km.com.br
28 of 223
7/21/2019 Apostila Curso Cakephp 2km
32/226
Regra Validao
phone
O campo precisa ser um nmero de telefone vlido. Para telefones fora do padro americano possvel informar uma expresso regular no segundo parmetro.
array('telefone' => array('rule' => array('phone',null,'us')));
postal
O campo precisa ser um cep vlida. Para ceps fora do padro americano possvel informaruma expresso regular no segundo parmetro.
array('cep' => array('rule' => array('postal',null,'us')));
rangeO campo precisa ser um valor entre os dois valores informados.
array('numero' => array('rule' => array('range',0,10)));
ssn
O campo precisa ser um nmero do seguro social. Para nmeros fora do padro americano possvel informar uma expresso regular no segundo parmetro.
array('flag' => array('rule' => array('ssn',null,'us')));
urlO campo precisa ser uma url vlida.
array('flag' => array('rule' => 'url'));
Tabela 8 - Regras padres de validao do CakePHP
2.3.1.1.10.1 - Validao Avanada
Usando uma regra customizada.
var $validate = array('login' => array(
'rule' => array('custom', '/^[a-z0-9]{3,}$/i'),'message' => 'Somente letras e nmeros so aceitos, mnimo de 3
caracteres')
);
Listagem 23 - Exemplo de uma regra customizada utilizando expresso regular
var $validate = array(
'codigoPromocional' => array('rule' => array('limiteDeUso', 250),'message' => 'Cdigo informado foi usado mais vezes do que o
permitido.')
);function limiteDeUso($data, $limite){
$contador = $this->find('count', array('conditions' => $data, 'recursive' =>-1));
return $contador < $limite;}
Listagem 24 - Exemplo de uma regra customizada utilizando uma funo prpria
Curso de CakePHP da 2km interativa! | www.2km.com.br
29 of 223
7/21/2019 Apostila Curso Cakephp 2km
33/226
var $validate = array('login' => array(
'alphanumeric' => array('rule' => 'alphaNumeric','message' => 'Somente alfanumricos so aceitos'
),'between' => array(
'rule' => array('between', 4,8),'message' => 'O campo deve possuir entre 4 e 8 caracteres'
),'isUnique' => array(
'rule' => array('isUnique'),'message' => 'O login j existe em nossa base de dados'
),)
);
Listagem 25 - Usando mais de uma validao no mesmo campo
2.3.1.1.11 - name
Este atributo permite que o cdigo do CakePHP na camada de modelo seja compatvel com o php4. Portanto, recomendvel sempre utilizar esta declarao j que pode ocorrer da aplicao ter que mudar para umservidor que utiliza o php nessa verso.
Listagem 26 - Exemplo de uso de name:
2.3.1.1.12 - cacheQueries
Se atribudo true para essa propriedade, os dados retornados pelo model so armazenados em cache. Essesdados ficam em cache durante a requisio.
2.3.1.2 - Associando os modelos
2.3.1.2.1 - hasOne
Esse tipo de relacionamento usado quando uma tabela pode possuir apenas um resultado relacionado em
outra tabela. Por exemplo, em uma aplicao de comunidade virtual onde se tem uma tabela de Usurio eoutra de Perfil do Usurio. Cada usurio pode ter apenas um perfil. Neste caso o relacionamento entre a tabelaUsurio e Perfil de Usurio do tipo hasOne.
Para que esse relacionamento funcione corretamente, deve-se definir uma chave estrangeira na tabela Perfil deUsurio. Por conveno do CakePHP a chave estrangeira, neste exemplo, deveria se chamar usuario_id.
Depois de estruturado corretamente o banco de dados, deve-se definir o tipo de relacionamento no modeloUsurio, que dever ser salvo no arquivo app/models/usuario.php.
7/21/2019 Apostila Curso Cakephp 2km
34/226
?>
Listagem 27 - Exemplo de uso do hasOne
O exemplo acima a forma mais simples de se estabelecer o relacionamento do tipo hasOne. Existem casosonde necessrio ter mais controle sobre o relacionamento estabelecido. Veja o exemplo seguinte:
Listagem 28 - Exemplo de uso avanado do hasOne
O array das associaes do tipo hasOne podem conter as seguintes chaves:
Chave Descrio
classNameO nome da classe utilizada pelo modelo relacionado. Se o relacionamento como modelo Perfil, o nome de className dever ser Perfil.
foreignKey O nome da chave estrangeira contida no modelo relacionado. Se a chaveestrangeira na tabela Perfil usuario_id, ento este dever ser o nome contidoem foreignKey.
conditionsEm conditions pode-se introduzir fragmentos da query para filtrar os dados nomodelo relacionado. bom utilizar o nome do modelo antes do nome do campo.Exemplo: 'Perfil.publicado = 1'
fieldsPode-se definir quais campos da tabela sero recuperadas. Por padro todos oscampos so recuperados.
dependent
Se dependentcontiver o valor truee for chamado o mtodo delete()com oparmetro cascade, ento todos os dados relacionados sero apagados.Exemplo: Se for apagar um usurio dessa forma, o seu respectivo perfil serapagado tambm.
Tabela 9 - Chaves da associao hasOne
2.3.1.2.2 - hasMany
Seguindo nosso exemplo, o Usurio de nossa comunidade virtual pode ter diversos artigos. Portanto a tabelaUsurio estabelece um relacionamento do tipo hasMany com a tabela Artigos.
Neste caso a chave estrangeira dever se encontrar na tabela Artigos. Seguindo o padro do CakePHP o nomeda chave estrangeira dever ser Artigo.usuario_id.
Curso de CakePHP da 2km interativa! | www.2km.com.br
31 of 223
7/21/2019 Apostila Curso Cakephp 2km
35/226
Listagem 29 - Exemplo de uso de hasMany
Listagem 30 - Exemplo avanado de uso de hasMany
O array das associaes do tipo hasMany podem conter as seguintes chaves:
Chave Descrio
className O nome da classe que est associada ao modelo atual. Se Usurio possui muitosArtigos, o nome de className dever ser Artigo.
foreignKey O nome da chave estrangeira contida no modelo relacionado. Se a chaveestrangeira na tabela Artigo usuario_id, ento este dever ser o nome contidoem foreignKey.
conditions Em conditions pode-se introduzir fragmentos da query para filtrar os dados nomodelo. bom utilizar o nome do modelo antes do nome do campo. Exemplo:'Artigo.publicado = 1'
fields Pode-se definir quais campos da tabela sero recuperadas. Por padro todos oscampos so recuperados.
order Fragemento de cdigo que permite definir o tipo de ordenao dos resultados.
limit O nmero mximo de resultados retornados.
o!set O nmero de linhas associadas que devem ser excluidas do resultado.
Curso de CakePHP da 2km interativa! | www.2km.com.br
32 of 223
7/21/2019 Apostila Curso Cakephp 2km
36/226
Chave Descrio
dependent Se for associado o valor true possibilita apagar os resultados em cascata. Ouseja, as linhas gravadas em outras tabelas que possuem relacionamento com atabela deste modelo tambm sero apagadas.
exclusive Se for associado o valor true ao apagar o registro ir ser invocado o mtododeleteAll(). Existe ganho de performance, mas em certas ocasies no a formaideal a ser utilizada.
finderQuery Pode-se fazer uma query inteira usando esta chave. Utilizado quando necessrio obter resultados muito especficos.
Tabela 10 - Chaves da associao hasMany
2.3.1.2.3 - belongsTo
Depois de estabelecido o relacionamento do tipo HasOne ou HasMany podemos estabelecer o relacionamentobelongsTo na tabela relacionada. Esse passo pode ser importante se pretendemos recuperar dados a partir dosregistros da tabela que relacionada tabela que estabeleceu o hasOne ou HasMany. Seguindo o exemploexposto em hasOne, a tabela Perfil do Usurio pertence a tabela Usurio. Ou seja, um perfil inscrito na tabelaPerfil do Usurio pertence a um usurio pertencente tabela Usurio.
No banco de dados deve-se seguir a mesma conveno usada no hasOne e hasMany. Ou seja, a chaveestrangeira dever estar na tabela que ir estabelecer o relacionamento belongsTo.
Listagem 31 - Exemplo de uso de belongsTo
Listagem 32 - Exemplo avanado de uso de belongsTo
O array das associaes do tipo belongsTo podem conter as seguintes chaves:
Chave Descrio
className O nome da classe que est associada ao modelo atual. Se Perfil pertence classeUsurio, o nome de className dever ser Usurio.
Curso de CakePHP da 2km interativa! | www.2km.com.br
33 of 223
7/21/2019 Apostila Curso Cakephp 2km
37/226
Chave Descrio
foreignKey O nome da chave estrangeira contida no modelo atual. Se a chave estrangeira natabela Perfil usuario_id, ento este dever ser o nome contido em foreignKey.
conditions Em conditions pode-se introduzir fragmentos da query para filtrar os dados no
modelo. bom utilizar o nome do modelo antes do nome do campo. Exemplo:'Perfil.publicado = 1'
fields Pode-se definir quais campos da tabela sero recuperadas. Por padro todos oscampos so recuperados.
counterCache Se estiver associado o valor true ir aumentar ou diminuir o valor em[singular_model_name]_countquando se for salvar ou apagar um registro. Ovalor desse campo representa o nmero de registros relacionados. Se umUsurio possui 10 amigos, ento Usuario.amigo_count = 10.
Tabela 11 - Chaves da associao belongsTo
2.3.1.2.4 - hasAndBelongsToMany (HABTM)
Quando um modelo pode ter diversos resultados associados de outro modelo e vice-versa necessrio utilizaro relacionamento do tipo hasAndBelongsToMany. Neste caso, ser necessrio criar uma tabela intermediriana estrutura do banco de dados. O nome dessa nova tabela dever conter o nome das duas tabelasrelacionadas em ordem alfabtica e separadas por underscore(_). Dever existir dois campos nessa tabela dotipo inteiro. Esses campos devero ser as chaves estrangeiras das duas tabelas. recomendvel adicionartambm um campo id para esta tabela, assim mantm-se o padro nesta tabela igual o padro de todas.
O nome das chaves estrangeiras deve seguir o padro do CakePHP. Em nosso exemplo, um usurio podepertencer em diversas comunidades. E, ao mesmo tempo, uma comunidade pode possuir diversos usurios.
Ento o nome da nossa tabela seria comunidades_usuarios e o nome dos campos na tabela intermediria seriarespectivamente id, comunidade_id e usuario_id.
Depois de criado toda a estrutura de banco de dados, passamos para o cdigo no modelo.
7/21/2019 Apostila Curso Cakephp 2km
38/226
);}?>
Listagem 33 - Exemplo de hasAndBelongsToMany
O array das associaes do tipo hasAndBelongsToMany podem conter as seguintes chaves:
Chave Descrio
className O nome da classe que est associada ao modelo atual. Se Comunidade estrelacionada classe Usurio, o nome de className dever ser Usurio.
joinTable O nome da tabela intermediria que possui as chaves estrangeiras.
with O nome do modelo utilizado para fazer a juno entre os modelos. Por padro oCakePHP j cria este modelo automaticamente. Neste caso, o nome seriaComunidadeUsuario. Caso se deseja utilizar outro modelo para desempenhareste papel, pode-se colocar nesta chave o nome deste modelo.
foreignKey O nome da chave estrangeira contida no modelo atual. Torna-se til quando sepretende estabelecer mais de um relacionamento HABTM no mesmo modelo.
associationforeignKey O nome da chave estrangeira contida no modelo relacionado. Torna-se tilquando se pretende estabelecer mais de um relacionamento HABTM no mesmomodelo.
unique Se associado o valor truea essa chave o CakePHP ir apagar os
relacionamentos entre os dados antes de inserir novamente em uma chamada deupdate.
conditions Em conditions pode-se introduzir fragmentos da query para filtrar os dados nomodelo. bom utilizar o nome do modelo antes do nome do campo. Exemplo:'Comunidade.ativa = 1'
fields Pode-se definir quais campos da tabela sero recuperadas. Por padro todos oscampos so recuperados.
order Fragemento de cdigo que permite definir o tipo de ordenao dos resultados.
limit O nmero mximo de resultados retornados.
o!set O nmero de linhas associadas que devem ser excluidas do resultado.
finderQuery,deleteQuery, insertQuery
Pode-se fazer uma query inteira usando esta chave. Essa query pode ser debusca, deleo ou insero. Utilizado quando necessrio obter resultadosmuito especficos.
Tabela 12 - Chaves da associao hasAndBelongsToMany
Curso de CakePHP da 2km interativa! | www.2km.com.br
35 of 223
7/21/2019 Apostila Curso Cakephp 2km
39/226
2.3.1.3 - Recuperando dados
2.3.1.3.1 - find
find($type, $params)
$type - pode receber os valores 'all', 'first', 'list', 'neighbors', 'count' ou 'threaded'. O valor padro utilizado o'first'.
$params - trata-se de um array que pode possuir os seguintes parmetros:
Listagem 34 - Parmetros do array $params
Se estiver sendo usado $type do tipo list, o campo $key no array $params ir definir o ndice e o valor.
Curso de CakePHP da 2km interativa! | www.2km.com.br
36 of 223
7/21/2019 Apostila Curso Cakephp 2km
40/226
Listagem 35 - Exemplos do $typelist
2.3.1.3.2 - findBy
findBy(string $value)
Atravs deste mtodo possvel procurar por certo campo da tabela. Para isso basta adicionar o nome do
campo no formato CamelCaselogo aps o findBy. O parmetro $value deve ser uma stringcom o critrio dabusca.
2.3.1.3.3 - findAllBy
findAllBy(string $value)
Atravs deste mtodo possvel procurar por certo campo da tabela. Para isso basta adicionar o nome do
campo no formato CamelCaselogo aps o findAllBy. O parmetro $value deve ser uma stringcom o critrio dabusca.
2.3.1.3.4 - query
Atravs desse mtodo do Modelo possvel fazer requisies ao banco de dados de forma customizada. Nestecaso recomendvel utilizar a biblioteca Sanitize para prevenir ataques do tipo injection e cross-site scripting.
2.3.1.3.5 - field
field(string $name, array $conditions = null, string $order = null)
Esse mtodo retorna um nico resultado do campo especificada pelo parmetro $name. Se for passado algumacondio em conditionsser retornado o primeiro resultado filtrado pela condio. Pode-se utilizar $orderpara definir o tipo de ordenao do resultado. Se for setado o id no modelo, retornado o resultado do idescolhido. Se nenhum resultado seja trazido, esse mtodo retorna false.
2.3.1.3.6 - Construindo condies complexas
Existem casos onde ser necessrio recuperar dados com condies mais complexas. Muitas vezes o uso de
arrayspode ajudar a simplificar e facilitar a manipulao dos dados.
Curso de CakePHP da 2km interativa! | www.2km.com.br
37 of 223
7/21/2019 Apostila Curso Cakephp 2km
41/226
7/21/2019 Apostila Curso Cakephp 2km
42/226
//Condio BETWEEN$condicoes = array('Comentario.id BETWEEN ? AND ?' => array(23,54));$this->Comentario->find('all', array('conditions'=> $condicoes));
//Usando GROUP BY$condicoes = array('fields' => array('Produto.tipo','MIN(Produto.preco) as preco'),'group' => 'Produto.tipo');
$this->Produto->find('all', $condicoes);
//Condio complexa$condicoes = array(
'OR' => array(array('Categoria.nome' => 'Eletrodomsticos'),array('Categoria.nome' => 'Informtica')
),'AND' => array(
array('OR'=>array(array('Categoria.ativa' => 'true')),'NOT'=>array(array('Categirua.ativa'=> 'inativa'))
))
);$this->Categoria->find('all', array('conditions'=> $condicoes));
?>
2.3.1.4 - Salvando dados
2.3.1.4.1 - save
save(array $data = null, boolean $validate = true, array $fieldList = array())
$data: array contendo os dados a serem salvos, tendo como ndice os nomes dos campos onde estes dadosdevero ser salvos.
$boolean: se for atribuido o valor true, o mtodo save ir validar os dados antes de salv-lo. As regras devalidao podem ser montadas no array $validate no prprio Modelo.
$fieldList: os campos onde os dados devero ser salvos.
Este mtodo possui uma sintaxe alternativa:
save(array $data = null, array $params = array())
No parmetro $params possvel passar as seguintes opes:
validate: true ou falsefieldList: array com o nome dos campos onde os dados sero salvoscallbacks: true, false, after ou before
Depois que os dados foram salvos, pode-se acessar o valor do id pode ser recuperado no atributo $id doobjeto do modelo.
2.3.1.4.2 - saveAll
saveAll(array $data = null, array $options = array())
Esse mtodo pode ser utilizado para salvar dados de um modelo ou, alm de salvar os dados do modelo,
gravar os dados nos seus modelos relacionados.
Curso de CakePHP da 2km interativa! | www.2km.com.br
39 of 223
7/21/2019 Apostila Curso Cakephp 2km
43/226
No parmetro $optionspode ser usado os seguintes opes:
Chave Descrio
validate
Se atribuido falseno ocorre validao. Se atribudo true, cada registro validado antes de serem salvos. Se atribudo firsttodos os dados so validadosantes de ser salvo. Se for atribudo onlyos dados so apenas validados e no
salvos.
atomicSe for atribudo trueo CakePHP ir tentar salvar todos os registros em umatransao nica. Se o banco de dados no der suporte a transao nica, deverser usado false. O valor padro true.
fieldList array com o nome dos campos onde os dados sero salvos
Tabela 13 - Chaves do parmetro $options
2.3.1.4.3 - create
create(array $data = array())
Esse mtodo utilizado para gravar um novo registro. Se, ao pedir para criar um novo registro com essemtodo, o modelo estiver com o parmetro $data populado com dados, ento estes sero utilizados para criaro novo registro.
2.3.1.4.4 - saveField
saveField(string $fieldName, string $fieldValue, $validate = false)
Esse mtodo do modelo utilizado para salvar uma linha em um nico campo do banco de dados. Para utilizar
esse mtodo necessrio antes atribuir o ID ao modelo. O parmetro fieldName deve conter apenas o nomedo campo do banco de dados. Veja a seguir um exemplo de uso de saveField:
Listagem 36 - Exemplo de uso do mtodo saveField()
2.3.1.4.5 - updateAll
updateAll(array $fields, array $conditions)
Atualiza diversos registros em uma s operao. Os registros a serem atualizados devero ser identicados noparmetro $conditionse os seus valores no parmetro $fields.
Listagem 37 - Exemplo de uso do mtodo updateAll()
2.3.1.4.6 - counterCache
Curso de CakePHP da 2km interativa! | www.2km.com.br
40 of 223
7/21/2019 Apostila Curso Cakephp 2km
44/226
Este mtodo ajuda a ter um contador dos registros de modelos relacionados ao modelo atual. O nome docampo ser o nome do modelo seguido de underscore(_) seguido de count. Por exemplo, se voc possui umatabela chamada BlogComentarios e outra chamada Blog. Neste caso, deveria-se criar um campo na tabela Blogdeveria ser criado um campo do tipo inteiro com o nome blog_comentario_count. Uma vez que o campo tenhasido inserido na tabela ento pode-se utilizar o counterCacheno array $belongsTo e atribuir o valor true. Vejao exemplo a seguir:
Listagem 38 - Exemplo de uso do atributo counterCache
2.3.1.5 - Apagando dados
2.3.1.5.1 - del
delete(int $id = null, boolean $cascade = true);
Apaga o registro identificado pelo parmetro $id. Por padro apaga os registros relacionados a ele. Se umacategoria de produto for apagada, por padro o CakePHP ir apagar todos os produtos relacionados essacategoria.
2.3.1.5.2 - deleteAll
deleteAll(mixed $conditions, $cascade = true, $callbacks = false)
Funciona igual a del e remove. A nica diferena que pode-se estabelecer condies, no formato defragmentos de uma query, no parmetro $conditions.
2.3.1.6 - Callbacks
2.3.1.6.1 - beforeFind
beforeFind(mixed $queryData)
Esse callback chamado antes que alguma operao de find seja chamada. O parmetro $queryDatacontminformaes sobre a queryatual (condies, campos, etc.). Se este mtodo retornar falsea operao de buscano ir ocorrer.
2.3.1.6.2 - afterFind
afterFind(array $results, bool $primary)
Esse callback utilizado para introduzir lgica aps uma operao de find. importante para tratar dadoscomo alterar datas ou valores retornados pela busca. Os resultados da busca podem ser acessados atravs doparmetro $results. Este mtodof dever retornar o resultado da busca com os valores alterados.
Se o parmetro $primaryfor false o resultado da busca vai ser armazenado no array results de formadiferente. Veja a diferena a seguir:
7/21/2019 Apostila Curso Cakephp 2km
45/226
0 => array('NomeDoModelo' => array(
'campo1' => 'valor1','campo2' => 'valor2'
))
);
// Resultados retornados com o parmetro $primary = false$results = array(
'campo_1' => 'valor1','campo_2' => 'valor2'
);?>
Listagem 39 - Exemplo de uso do parmetro $primary
2.3.1.6.3 - beforeValidate
beforeValidate()
Esse callback utilizado para alterar alguma validao ou inserir lgica antes da validao ocorrer. Se essecallbackretornar falsea validao no ir ocorrer.
2.3.1.6.4 - beforeSave
beforeSave()
Esse callback utilizado para inserir lgica antes do dados serem salvos e logo aps os dados seremvalidados. importante para alterar algum formato de data que precise ser armazenado de forma diferente nobanco de dados. Veja o exemplo a seguir:
Listagem 40 - Exemplo de uso do mtodo beforeSave()
2.3.1.6.5 - afterSave
afterSave(boolean $created)
Callbackutilizado para inserir lgica depois que um registro foi salvo. O parmetro $createdir ser truese umnovo registro foi criado, ser false se tiver ocorrido uma operao de atualizao.
Curso de CakePHP da 2km interativa! | www.2km.com.br
42 of 223
7/21/2019 Apostila Curso Cakephp 2km
46/226
2.3.1.6.6 - beforeDelete
beforeDelete()
Se for necessrio inserir alguma lgica antes de apagar um registro, esta deve ser posta neste callback. Eladever retornar o valor truese pretende-se que a deleo ocorra e falseem caso contrrio.
2.3.1.6.7 - afterDelete
afterDelete()
Se for necessrio inserir qualquer lgica depois de apagar um registro, esta lgica deve ser inserida nessecallback.
2.3.1.6.8 - onError
onError()
Se algum erro ocorrer esse callback chamado.
2.3.2 - A camada de controle
A camada de controle usada para gerenciar a lgica da sua aplicao. Na maioria das vezes um controle irgerenciar a lgica de um modelo. O nome dos controles devero ser compostos pelo nome do modelo noplural seguidos de underscore(_) e a palavra "controller". Os arquivos de controle devem ser salvos dentro dodiretrio app/controllers/.
Todo controle herda da classe appControllerque por sua vez herda da classe Controller. A classeappControllerencontra-se no arquivo app/app_controller.php. Os mtodos criados nesta classe ficamdisponveis para todos os controles da aplicao. A classe Controller, por sua vez, uma biblioteca padro doCakePHP.
Cada mtodo de um controller tido como uma ao. As aes so usadas para gerar as telas na camada deViso. O usurio final escreve na url o seguinte caminho: nomeDoModelo/Ao/Parmetro1/Parmetro2...
Assim o dispatcherdo CakePHP pega essa url e traduz em utilizar o mtodo do controle, passando osdeterminados parmetros.
Listagem 41 - Exemplo de um arquivo de controle
2.3.2.1 - Atributos da camada de Controle
2.3.2.2.1 - name
Este parmetro deve se usado para garantir que a aplicao seja compatvel com php verso 4. O valor de
$namedeve ser igual ao nome do controle.
Curso de CakePHP da 2km interativa! | www.2km.com.br
43 of 223
7/21/2019 Apostila Curso Cakephp 2km
47/226
Listagem 42 - Exemplo de declarao de name
2.3.2.2.2 - components
Esse atributo utilizado quando se precisa usar um componente no controle. Os componentes so bibliotecasdo CakePHP que trazem funcionalidades camada de controle.
2.3.2.2.3 - helpers
Esse atributo utilizado quando se precisa usar um helper no controle. Geralmente helpers so bibliotecas doCakePHP que trazem funcionalidades na camada de viso. Embora sua importncia resida na camada de viso,eles devem ser importados na camada de controle.
2.3.2.2.4 - uses
As vezes existe a necessidade de se usar outros modelos que no aquele relacionado com o controller. Nestescasos, necessrio utilizar esse atributo para selecionar um ou mais modelos diferentes.
2.3.2.2.5 - layout
Esse atributo utilizado para selecionar qual view(tela de apresentao gerada na camada de viso) serutilizada. Neste caso, o CakePHP ir procurar no diretrio /app/views/layoutspelo arquivo atribudo a esseatributo. O nome que deve ser atribuido a layoutdever ser o nome do arquivo menos a sua extenso, no caso
.ctp. Caso no seja utilizado esse atributo, o CakePHP ir procurar por /app/views/layouts/default.ctp.
2.3.2.2.6 - params
$this->params
Curso de CakePHP da 2km interativa! | www.2km.com.br
44 of 223
7/21/2019 Apostila Curso Cakephp 2km
48/226
Esse atributo fornece acesso aos parametros da requisio atual. muito utilizado para obter informaessobre informaes que foram enviadas atravs dos mtodos POSTou GET.
Parmetro Descrio
form Qualquer dado postado via mtodo POST em qualquer formulrio armazenadoaqui. Inclui dados encontrados tambm em $_FILES.
admin Se contiver o valor 1 a ao atual foi feita atravs da rota admin.
bare Armazena o valor 1 se o layout estiver vazio, caso contrrio guarda o valor 0.
isAjax Se a requisio atual do tipo Ajax, armazenado o valor 1. Caso contrrio armazenado o valor 0. Essa varivel s utilizada quando o componenteRequestHandler utilizado no controller.
controller Armazena o nome do controller utilizado pela requisio atual.
action Armazena o nome da ao utilizada pela requisio atual.
pass Armazena a string com as variveis passadas via GET.
url Armazena a url atual que est sendo utilizada. composto de um array, onde aurl fica armazenada na chave 'url' e as variveis enviadas via GET ficamarmazenadas nas chaves 'var1', 'var2', e assim por diante.
data Utilizado para manipular os dados enviados via POST pelo formulrio deFormHelper.
prefix Armazena o valor do prefixo utilizado na rota. Um exemplo de prefixo o'admin'.
named Armazena qualquer parmetro enviado na url no formato chave:valor. Essesdados so armazendos em um array, podendo ser enviados diversos parmetros.
Tabela 14 - Chaves do atributo $params
2.3.2.2.7 - data
$this->data
Armazena os dados enviadas da camada de viso para a camada de controle atravs do FormHelper.
7/21/2019 Apostila Curso Cakephp 2km
49/226
}}
}?>
2.3.2.2 - Mtodos da camada de Controle
2.3.2.2.1 - set
set(string $var, mixed $value)
Atravs desse mtodo possvel enviar dados para a camada de viso. Tambm possvel passar um arraycomo parmetro. Por exemplo: $this->set($nomes).
Importante
Para alterar o ttulo da pgina na viso, voc deve definir o valor da varivel title_for_layout:
$this->set('title_for_layout', 'Ttulo da pgina');
2.3.2.2.2 - render
render(string $action, string $layout, string $file)
Esse mtodo sempre chamado no fim de todo mtodo de um controle. Atravs dele definido qual arquivode viso ser embutido dentro do layout. Se renderno utilizado explicitamene no mtdo do controle, entoo controle ir procurar por uma tela com mesmo nome da ao do controle. Por exemplo, no mtodo list docontrole usuario o render por padro iria procurar pelo arquivo /app/views/usuario/list.ctp.
possvel especificar outra viso atravs de $action.
Se $this->autoRenderestiver atribudo com o valor false, no fim do controle no ir ser executado essemtodo. Se pretende-se ler um elemento, deve-se escrever o seguinte cdigo: $this->render('/elements/ajax'), que ir procurar pelo arquivo app/views/elements/ajax.ctp.
2.3.2.2.3 - redirect
redirect(string $url, integer $status, boolean $exit)
Utilizado para redirecionar o usurio para outra view. O parmetro $urldeve conter um caminho relativo nopadro de url do CakePHP. O parmetro $statuspermite definir o estado da requisio HTTP. Pode-se, porexemplo, atribuir o valor 404, que corresponde a erro na busca do arquivo. Se for atribudo o valor falseaoparmetro exit, o mtodo no vai executar a funo exit()aps executada.
7/21/2019 Apostila Curso Cakephp 2km
50/226
}?>
2.3.2.2.4 - flash
flash(string $message, string $url, integer $pause)
O mtodo flash similar ao redirect. A nica diferena a possibilidade de mostrar uma mensagem ao usurioantes dele ser redirecionado pgina. No parmetro $messagedeve-se atribuir a mensagem que deseja-semostrar ao usurio antes que este seja redirecionado para a urldefinida no parmetro $url. No parmetro$pausedefine-se o tempo (em segundos) de exposio da mensagem.
2.3.2.2.5 - referer
Retorna a url que foi utilizada para chegar requisio atual. Veja o exemplo a seguir:
2.3.2.2.6 - disableCache
Utilizado para determinar ao browserdo usurio no fazer cache.
2.3.2.2.7 - postConditions
postConditions(array $data, mixed $op, string $bool, boolean $exclusive)
Transforma os dados postados em critrios de busca para o modelo. Pode-se utilizar o FormHelperpara geraro formulrio que ir fornecer os dados. Veja o exemplo a seguir:
7/21/2019 Apostila Curso Cakephp 2km
51/226
$dados=$this->Canal->find('all',$this->postConditions($this->data));$this->set('canal', $dados);
}}
}?>
2.3.2.2.8 - paginate
Esse mtodo utilizado para gerar paginao dos resultados. Pode-se utilizar as chaves conditions, fields,order, limit. Da mesma forma como se faz no mtodo find.
2.3.2.2.9 - requestAction
requestAction(string $url, array $options)
Esse mtodo utilizado para acessar uma ao de qualquer controle e retornar dados dessa ao. No
parmetro urldeve-se fornecer um caminho no padro do cake: nomeDoControle/nomeDaAo/parmetros.O parmetro $options utilizado para passar dados extras ao controle. Se nesse parmetro for passado ovalor returno resultado ser a renderizao da viso relacionada ao controle procurado pela $url.
2.3.2.3 - Callbacks
2.3.2.3.1 - beforeFilter
Esta funo executada antes de qualquer ao do controller. importante utiliz-la para inspecionar aexistncia de alguma varivel de sesso ou verificar se o usurio possui permisses de acesso.
2.3.2.3.2 - beforeRender
Esta funo executada depois da ao do controllere antes da viso ser renderizada.
2.3.2.3.3 - afterFilter
Este callback chamado depois que uma ao no controller executada.
Curso de CakePHP da 2km interativa! | www.2km.com.br
48 of 223
7/21/2019 Apostila Curso Cakephp 2km
52/226
2.3.2.3.4 - afterRender
Chamada depois que uma ao renderizada.
2.3.2.3.5 - _beforeSca!old
_beforeSca!old($method)
Este callback utilizado quando est sendo feito uso do sca!old. O parmetro $methoddeve conter o nomeda ao que ser executada.
2.3.2.3.6 - _afterSca!oldSave
_afterSca!oldSave($method)
Callbackigual ao_beforeSca!old, entretanto executado depois de uma ao de edio ou update realizadapor sca!old. O parmetro $methoddeve conter o valor editou update.
2.3.2.3.7 - _afterSca!oldSaveError
_afterSca!oldSaveError($method)
Callbackigual ao_afterSca!oldSave, entretanto executado quando ocorre algum erro na tentativa de edioou atualizao. O parmetro $methoddeve conter o valor editou update.
2.3.2.3.8 - _sca!oldError
_sca!oldError($method)
Essa funo chamada quando ocorre algum erro em uma ao feita via sca!old. O parmetro $methoddeveconter o nome da ao.
2.3.3 - A camada de visoEssa camada responsvel de gerar a interface com o cliente. Na maioria das vezes o resultado dessa camadaser um arquivo de extenso XHTML, mas possvel tambm gerar aruivos de RSS. possvel gerar tambmarquivos de extenso CSV.
Os arquivos da viso so salvos com a extenso .ctp e escritos em php. A extenso ctp quer dizer CakePhpTemplate. Esses arquivos possuem toda a lgica para receber os dados enviados pela camada de controle eapresent-los para o usurio.
Os arquivos de viso so salvos no diretrio app/views, dentro de uma pasta com o nome do controle que estrelacionado. O nome do arquivo deve ser o nome da ao que a viso vai apresentar com extenso .ctp. Porexemplo, O arquivo de viso da ao de adicionar um produto do controle produto deve ser salvo no seguintearquivo app/views/produto/adicionar.ctp
A camada de viso composto de trs partes distintas: layout, elementse helpers.
Layoutsso arquivos de viso que iro abrigar diversos arquivos da aplicao. A maioria dos arquivos de visoso renderizadas dentro de um arquivo de layout.
Elementsso pequenos pedaos de cdigo que podem ser reusados em diversos lugares da aplicao.Geralmente so renderizados dentro de uma view.
Helpersfornecem lgica para os arquivos de viso. Atravs de helperso CakePHP fornece formas fceis de seconstruir formulrios, aplicaes Ajax, paginao, RSS, dentre diversas outras funcionalidades.
2.3.3.1 - Layouts
O layoutcontm cdigo de apresentao que abriga os arquivos de viso. Tudo que se deseja ver em umaviso deve ser posto dentro de um arquivo de layout.
Curso de CakePHP da 2km interativa! | www.2km.com.br
49 of 223
7/21/2019 Apostila Curso Cakephp 2km
53/226
Os arquivos de layoutesto disponveis dentro do diretrio /app/views/layouts. Por padro o CakePHP irprocurar pelo arquivo /app/views/layouts/default.ctppara renderizar os arquivos de viso dentro destearquivo. Entretanto, possvel sobrescrever esse arquivo.
Um arquivo de layoutdeve conter uma regio destinada para carregar os arquivos de viso. Isto feito atravsda varivel $content_for_layout. Pode-se tambm definir o ttulo da tela atravs da funo$this->set('title_for_layout','Ttulo da pgina'). Para incorporar arquivos de javascript externosao arquivo de layout, deve-se utilizar a varivel $scripts_for_layout.
Ao invs de definir o ttulo da viso em layout possvel definir no prprio arquivo de controle atravs davarivel $this->layout. O mesmo ocorre com o ttulo, que pode ser definido com$this->set('title_for_layout','Ttulo da pgina');no arquivo de controle para definir o ttulo datela. Para ver um exemplo de arquivo de layout abra o arquivo /app/views/layouts/default.ctpdoCakePHP.
Listagem 43 - Exemplo de uso de $this->set('title_for_layout','Ttulo da pgina')e $this->layoutnoarquivo de controle
Alm do layoutpadro que o defaulto CakePHP tambm fornece o ajaxque adequado para renderizar telascom recursos ajaxe o layoute o flashque til quando ir se lidar com mensagens enviadas via mtodo flash.
2.3.3.2 - Elements
Muitas aplicaes possuem partes da apresentao que precisam ser repetidas em diversas partes. Para issoexiste o element. Geralmente essas partes da apresentao podem ser um menu, formulrios de login, caixasde ajuda, dentre diversos outros exemplos. Um elemento pode ser visto como um mini-arquivo de viso que embutido dentro de um arquivo de viso, layoutse mesmo dentro de outro arquivo element.
Arquivos desse tipo so salvos dentro do diretrio /app/views/elements/e utilizam a extenso .ctp.
Listagem 44 - Exemplo de como importar um Element
2.3.3.2.1 - Passando variveis dentro de um elemento
possvel passar dados para um elemento atravs do segundo parmetro.
Neste exemplo, dentro de element, a varivel $mensagem ficaria disponvel com o valor "nononoo nononoon".Alm de dados, a funo elementtambm fornece as opes cachee plugin.
7/21/2019 Apostila Curso Cakephp 2km
54/226
$this->element('caixaDeMensagem',array(
"mensagem" => "nononoo nononoon""mensagem2" => "outra varivel""cache" => "+2 days""plugin" => ""
)
);?>
2.3.3.2.2 - Fazendo o cachede elementos
Se o parmetro cacheestiver atribudo com o valor true, ser feito cache de um dia. Pode-se tambm definirvalores diferentes deste valor padro.
2.3.3.2.3 - Requiso de elementos atravs de um plugin
Para utilizar um elementdentro de um plugin, basta utilizar o parmetro pluginno mtodo element.
2.3.3.3 - Themes
Usando Themes possvel alterar o visual da aplicao de forma fcil e prtica. Para usar temas necessrioutilizar no controllera classe ThemeViewno lugar da classe de viso padro. Depois, atravs da varivel$theme possvel definir o tema que ser utilizado.
Tambm possvel trocar os temas dentro das funes de callback: beforeFiltere beforeRender.
Curso de CakePHP da 2km interativa! | www.2km.com.br
51 of 223
7/21/2019 Apostila Curso Cakephp 2km
55/226
Os temas so salvos dentro do diretrio /app/views/themed/, da mesma forma que acontece com os arquivosda view, cada tema deve estar dentro de uma pasta que, por sua vez, deve ter o nome do tema. Em nossoexemplo passado, o arquivo de tema seria salvo dentro do diretrio /app/views/themed/exemplo/.
Se fosse um arquivo do tipo edit, este arquivo teria que ser salvo no seguinte caminho: /app/views/themed/exemplo/edit.ctp.
Se o tema no for achado dentro do diretrio app/views/themes, o CakePHP ir procurar em app/viewsum
arquivo substitui
Recommended