php 07 cakephp
TRANSCRIPT
Instalao do Ruby
Programao para WEB
Regis Pires Magalhes
O Framework CakePHP
Framework
Oferece uma arquitetura que pode ser usada em vrias aplicaes.
Toda aplicao tem um conjunto de caractersticas bsicas em comum, que terminam sendo copiadas para a criao de novos cdigos.
Um framework projetado para prover uma estrutura para esses elementos comuns.
Publicaes sobre CakePHP
CakePHP in Action - The Official Guide
Duane O'Brien
Beginning CakePHP: From Novice to Professional
David Golding
Publicaes sobre CakePHP
Frameworks para Desenvolvimento em PHP
Elton Lus Minetto
Histrico
Em 2005, Michal Tatarynowicz escreveu uma pequena verso de um framework para aplicaes rpidas em PHP.
Depois ele publicou o framework sob licena MIT, chamando-o de Cake e abrindo-o comunidade que agora o mantm com o nome de CakePHP.
Caractersticas
Baseado no framework Ruby on Rails:
Conveno sobre Configurao;
Full Stack Web Framework;
DRY Dont Repeat Yourself No se repita
Arquitetura MVC Modelo, Viso, Controlador
Funcionalidade CRUD para interao com banco de dados
Scaffolding
Validaes nativas
Helpers nas vises para AJAX, JavaScript, HTML, formulrios, etc.
URLs e rotas personalizveis e limpas
Caractersticas
Ativo
Comunidade amigvel e extensa
Licena bastante flexvel (MIT)
Compatibilidade com PHP 4 e PHP 5
Gerao de cdigo
Componentes de E-mail, Cookie, Segurana, Sesses, Manipulao de Requisies, etc.
Lista de controle de acessos (ACL) flexvel
Cache flexvel
Internacionalizao e Localizao
Facilidade de disponibilizao
Comparativo com outros frameworks
Estrutura MVC mais eficiente que Symfony e Zend, alm de ocupar pouco espao no servidor. (David Golding)
Boa documentao, inclusive em portugus. Livros esto sendo publicados.
Comunidade grande e ativa.
Atualizaes freqentes.
Arquitetura MVC
Arquitetura MVC
Modelos para toda a interao com banco de dados;
Vises para todas as apresentaes e sadas;
Controladores para comandos e scripts.
MVC Vantagens
Tarefas repetitivas podem ser separadas, facilitando a manuteno, entendimento, alteraes, descoberta de erros e bugs, diviso de tarefas, etc.
Testando o PHP via console
php -v
Instalando o CakePHP
Baixe o CakePHP em:
http://cakephp.org/downloads
Descompacte-o na pasta htdocs e renomeie o diretrio para o nome mais adequado para sua aplicao.
Gerao de cdigo com Bake
Entre no diretrio do projeto:
cd \xampplite\htdocs\projeto-cake
Execute o gerador de cdigo (bake):
cake\console\cake bake -app app
Bake
Welcome to CakePHP v1.2.0.6311 beta Console--------------------------------------------------------------App : appPath: C:\xampplite\htdocs\locadora\app--------------------------------------------------------------Interactive Bake Shell--------------------------------------------------------------[D]atabase Configuration[M]odel[V]iew[C]ontroller[P]roject[Q]uitWhat would you like to Bake? (D/M/V/C/P/Q)
Estrutura de Diretrios
app nossa aplicao fica aqui.
cake o framework fica aqui. No mexa!!! Pode-se atualizar a verso do CakePHP sem interferir na aplicao.
docs documentao da nossa aplicao.
index.php coletor de requisies. Recebe as requisies se:
mod_rewrite ou .htaccess no estiver disponvel
/public no estiver definido como web root.
vendors bibliotecas de terceiros.
Estrutura de Diretrios
No diretrio App temos :
config: Arquivos de configurao
controllers: controladores
models: modelos
views: vises
webroot: html's, imagens, swf, css, javascript, etc.
Configurando o CakePHP
Teste a aplicao.
Algumas observaes aparecero e devero ser seguidas:
Alterar a seguinte linha do arquivo /app/config/core.php:
Configure::write('Security.salt', 'DyhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
Renomear o arquivo config/database.php.default para config/database.php e configur-lo para acessar o banco de dados de nossa aplicao.
Configuraes da base de dados
driver
Nome do driver da base de dados para esta configurao. Exemplos: mysql, postgres, sqlite, pear-drivername, adodb-drivername, mssql, oracle, ou odbc.
persistent
Se usar ou no uma conexo persistente com a base de dados.
host
O nome do servidor da base de dados (ou endereo IP).
login
O usurio desta conta.
password
A senha desta conta.
database
O nome da base de dados que esta conexo ir usar.
prefix (opcional)
Esta string ser adicionada como prefixo no nome de todas tabelas de sua base de dados.Se suas tabelas no possuem prefixo, deixe esta string vazia.
port (opcional)
A porta TCP ou socket Unix usado para conectar com o servidor.
enconding
Indica qual caractere definido ser usado para enviar indicaes SQL ao servidor.
schema
Usado em instalaes de base de dados PostgreSQL para especificar qual schema usar.
Base de Dados usando MySQL
app/config/database.php
Base de Dados usando MySQLi
app/config/database.php
Ol, Mundo!!!
app/controllers/hello_controller.php
Ol, Mundo!!!
Ol, Mundo!!!
app/views/hello/index.ctp
app/controllers/hello_controller.php
Envio de dados do controlador para a viso
Ol, .
app/views/hello/index.ctp
app/controllers/hello_controller.php
Mtodo set
O mtodo set usado nos controladores serve para enviar dados do controlador para a viso.
Exemplos:
$this->set('cor','azul');$this->set('colecoes',$this->Colecao->findAll());
Layouts
Layout padro:
cake/libs/view/layouts/default.ctp
Layout personalizado:
app\views\layouts\default.ctp
Aplicao ExemploMinha Aplicao
Fluxo de funcionamento do CakePHP
Configurao
app/config/core.php
debug
0 = Modo de Produo. Nenhuma sada.
1 = Exibe erros e alertas.
2 = Exibe erros, alertas e SQL.
3 = Exibe erros, alertas, SQL e listagem completa do controller.
Paginao
Padro: 20 itens por pgina
Configurao no controller:
var $paginate = array('limit' => 10);
var $paginate = array('limit' => 10,
'order' => 'Filme.titulo');
var $paginate = array('limit' => 10,
'order' => array('Filme.titulo' => 'desc'));
Paginao
Uso:
$filmes = $this->paginate();
$this->set('filmes', $filmes);
Ou:
$filmes = $this->paginate('Filme');
$this->set('filmes', $filmes);
Paginao
Na viso:
Paginao
Na viso:
Paginao
O contador pode ser personalizado:
Validao
Validao
Validao
Validao
Validao
alphaNumeric
between
blank
cc
comparison
date
decimal
equalTo
extension
ip
minLength
maxLength
money
numeric
phone
postal
range
url
Associaes
$belongsTo
$hasOne
$hasMany
$hasAndBelongsToMany
Associaes
Associaes
Associaes
$generos = $this->Filme->Genero->find('list',array('order' => 'Genero.descricao'));$this->set(compact('generos'));
$generos = $this->Filme->Genero->find('list', array('conditions' => array('Genero.descricao' => 'like a%'), 'order' => 'Genero.descricao'));$this->set(compact('generos'));
No modelo (genero.php):
Nas actions add e edit do controller (filmes_controller.php):
var $displayField = 'descricao';
Rotas
Definies de rota dizem ao CakePHP como mapear URLs para aes de controladores.
Comportamento padro:
A URL "/controller/action/var1/var2" mapeada para Controller::action($var1, $var2)
Tal comportamento pode ser personalizado.
Definio de Rotas
Arquivo:
/app/config/routes.php
Exemplo:
Flash
Usado para comunicao entre aes.
Contm uma string contendo informao ou erro.
Existe somente durante uma requisio.
No controller:
$this->Session->setFlash('OK');
Na view:
Logging
Usar:
$this->log("Ops, algo no deu certo!");
$this->log('mensagem de debug.', LOG_DEBUG);
Verificar em:
app/tmp/logs/error.log
app/tmp/logs/debug.log
Nveis de log:
LOG_ERROR
LOG_DEBUG
Model
Normalmente representam tabelas no banco de dados, mas tambm podem ser entradas LDAP, feeds RSS, arquivos no sistema, etc.
Model
app/models/pessoa.php
Personalizao de plurais
Pode-se ajustar a pluralizao no arquivo:
/app/config/inflections.php
Exemplo:
$irregularPlural = array('valor' => 'valores');
Controller
app/controllers/pessoas_controller.php
View
Obtm dados do controller e os usa para gerar a apresentao para o cliente.
Views so normalmente HTML, mas tambm podem ser: PDF, XML, objetos JSON, etc.
Layouts
Por padro, cada viso gerada pelo controlador colocada dentro de um layout.
Helpers de Viso
Ajudam na lgica de apresentao.
Compartilhados entre vrias vises.
$html->link
Compartilhamento de Cdigo
Controladores, Helpers e Modelos possuem uma super-classe que permitem o compartilhamento de cdigo entre vrios controladores, helpers ou modelos:
AppController /app/app_controller.php
AppHelper /app/app_helper.php
AppModel /app/app_model.php
Controller - Callbacks
Controladores possuem callbacks.
E o que so callbacks?
So funes/mtodos que ao invs de serem chamados diretamente por ns, so executadas pelo sistema/framework quando necessrio.
Callbacks so usados quando precisamos de alguma lgica entre operaes do prprio CakePHP.
Controller - Callbacks
Callbacks disponveis nos controladores:
beforeFilter() - executado antes de qualquer ao do controlador.
beforeRender() - executado aps a lgica do controlador, mas antes da gerao da viso.
afterFilter() - executado aps toda a lgica do controlador e gerao da viso.
afterRender() - A mesma coisa que afterFilter(), exceto quando h alguma lgica aps uma chamada explcita a render() na ao do controller.
Model Callbacks
beforeFind()
afterFind()
beforeValidate()
beforeSave()
afterSave()
beforeDelete()
afterDelete()
Autenticao
Criar tabela usuarios
Campo email - varchar(100)
Campo senha varchar(40)
Criar modelo, viso e controlador para Usuario
Autenticao
AppController
Autenticao
Criar aes login e logout no controlador de usurios:
Autenticao
Criar viso de login (/app/views/usuarios/login.ctp)
Digite usurio e senha para acessar o sistema
Autenticao
No Layout
Item de Menu:
Mensagem:
Permisses de Acesso
ACL Access Control Lists
ARO Access Request Objects
Usurios ou Grupos
Exemplo: admin, usuario, convidado
ACO Access Control Objects
Controladores, aes
Exemplo: Filme, Genero
ACL decide se um ARO pode acessar um ACO.
Ou seja: se um usurio tem acesso a uma ao C, R, U ou D do ACO.
AROs
$aro = new Aro();$aro->create($user_id, $parent_id, $alias);
$aro->create(0, null, 'Presidents');$aro->create(0, null, 'Artists');
$aro->create( 1, null, 'Bob Marley' );$aro->create( 2, null, 'Jimi Hendrix');$aro->create( 3, null, 'George Washington');$aro->create( 4, null, 'Abraham Lincoln');
$aro->setParent('Presidents', 'George Washington');$aro->setParent('Presidents', 'Abraham Lincoln');$aro->setParent('Artists', 'Jimi Hendrix');$aro->setParent('Artists', 'Bob Marley');?>
ACOs
$aco = new Aco();$aco->create($id, $parent, $alias);
$aco->create(1, null, 'Electric Guitar');$aco->create(2, null, 'United States Army');$aco->create(3, null, 'Fans');
ACL
ACL
$this->Acl->check($aro, $aco, $action = '*');
ACL
cd app..\cake\console\cake schema run create DbAcl
Criando as tabelas de ACL:
Referncias
The Cookbook
http://book.cakephp.org
API
http://api.cakephp.org/1.2
Bakery
http://bakery.cakephp.org
CakeForge
http://bakery.cakephp.org
Site oficial
http://www.cakephp.org
Grupo Google
http://groups.google.com/group/cake-php
Muokkaa otsikon tekstimuotoa napsauttamalla
Muokkaa jsennyksen tekstimuotoa napsauttamalla
Toinen jsennystaso
Kolmas jsennystaso
Neljs jsennystaso
Viides jsennystaso
Kuudes jsennystaso
Seitsems jsennystaso
Kahdeksas jsennystaso
Yhdekss jsennystaso
Muokkaa otsikon tekstimuotoa napsauttamalla
Muokkaa jsennyksen tekstimuotoa napsauttamalla
Toinen jsennystaso
Kolmas jsennystaso
Neljs jsennystaso
Viides jsennystaso
Kuudes jsennystaso
Seitsems jsennystaso
Kahdeksas jsennystaso
Yhdekss jsennystaso