O documento discute o framework CakePHP para desenvolvimento web em PHP. Apresenta as principais características do framework como arquitetura MVC, validações, paginação, layouts e histórico de sua criação.
Framework Oferece umaarquitetura que pode ser usada em várias aplicações. Toda aplicação tem um conjunto de características básicas em comum, que terminam sendo copiadas para a criação de novos códigos. Um framework é projetado para prover uma estrutura para esses elementos comuns.
3.
Publicações sobre CakePHPCakePHP in Action - The Official Guide Duane O'Brien Beginning CakePHP: From Novice to Professional David Golding
Histórico Em 2005,Michal Tatarynowicz escreveu uma pequena versão de um framework para aplicações rápidas em PHP. Depois ele publicou o framework sob licença MIT, chamando-o de Cake e abrindo-o à comunidade que agora o mantém com o nome de CakePHP.
6.
Características Baseado noframework Ruby on Rails: Convenção sobre Configuração; Full Stack Web Framework; DRY – Don´t Repeat Yourself – Não se repita Arquitetura MVC – Modelo, Visão, Controlador Funcionalidade CRUD para interação com banco de dados Scaffolding Validações nativas Helpers nas visões para AJAX, JavaScript, HTML, formulários, etc. URLs e rotas personalizáveis e limpas
7.
Características Ativo Comunidadeamigável e extensa Licença bastante flexível (MIT) Compatibilidade com PHP 4 e PHP 5 Geração de código Componentes de E-mail, Cookie, Segurança, Sessões, Manipulação de Requisições, etc. Lista de controle de acessos (ACL) flexível Cache flexível Internacionalização e Localização Facilidade de disponibilização
8.
Comparativo com outrosframeworks Estrutura MVC mais eficiente que Symfony e Zend, além de ocupar pouco espaço no servidor. (David Golding) Boa documentação, inclusive em português. Livros estão sendo publicados. Comunidade grande e ativa. Atualizações freqüentes.
Arquitetura MVC Modelospara toda a interação com banco de dados; Visões para todas as apresentações e saídas; Controladores para comandos e scripts.
11.
MVC – Vantagens Tarefas repetitivas podem ser separadas, facilitando a manutenção, entendimento, alterações, descoberta de erros e bugs, divisão de tarefas, etc.
Instalando o CakePHPBaixe o CakePHP em: http://cakephp.org/downloads Descompacte-o na pasta htdocs e renomeie o diretório para o nome mais adequado para sua aplicação.
14.
Geração de códigocom Bake Entre no diretório do projeto: cd \xampplite\htdocs\projeto-cake Execute o gerador de código (bake): cake\console\cake bake -app app
15.
Bake Welcome toCakePHP v1.2.0.6311 beta Console -------------------------------------------------------------- App : app Path: C:\xampplite\htdocs\locadora\app -------------------------------------------------------------- Interactive Bake Shell -------------------------------------------------------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [Q]uit What would you like to Bake? (D/M/V/C/P/Q)
16.
Estrutura de Diretóriosapp – nossa aplicação fica aqui. cake – o framework fica aqui. Não mexa!!! Pode-se atualizar a versão do CakePHP sem interferir na aplicação. docs – documentação da nossa aplicação. index.php – coletor de requisições. Recebe as requisições se: mod_rewrite ou .htaccess não estiver disponível /public não estiver definido como web root. vendors – bibliotecas de terceiros.
17.
Estrutura de DiretóriosNo diretório App temos : config : Arquivos de configuração controllers : controladores models : modelos views : visões webroot : html's, imagens, swf, css, javascript, etc.
18.
Configurando o CakePHPTeste a aplicação. Algumas observações aparecerão e deverão ser seguidas: Alterar a seguinte linha do arquivo /app/config/core.php: Configure::write('Security.salt', 'DyhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi'); Renomear o arquivo config/database.php.defaul t para config/database.php e configurá-lo para acessar o banco de dados de nossa aplicação.
19.
Configurações da basede dados driver Nome do driver da base de dados para esta configuração. Exemplos: mysql, postgres, sqlite, pear-drivername, adodb-drivername, mssql, oracle, ou odbc. persistent Se usará ou não uma conexão persistente com a base de dados. host O nome do servidor da base de dados (ou endereço IP). login O usuário desta conta. password A senha desta conta. database O nome da base de dados que esta conexão irá usar. prefix (opcional) Esta string será adicionada como prefixo no nome de todas tabelas de sua base de dados.Se suas tabelas não 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 indicações SQL ao servidor. schema Usado em instalações de base de dados PostgreSQL para especificar qual schema usar.
Olá, Mundo!!! <?php class HelloController extends AppController { var $uses = array (); var $autoRender = false ; function index() { echo 'Olá, Mundo!!!' ; } } ?> app/controllers/hello_controller.php
23.
Olá, Mundo!!! <?php class HelloController extends AppController { var $uses = array (); function index() { } } ?> < p > Olá, Mundo!!! </ p > app/views/hello/index.ctp app/controllers/hello_controller.php
24.
Envio de dadosdo controlador para a visão <?php class HelloController extends AppController { var $uses = array (); function index() { $this ->set( 'nome' , 'Regis' ); } } ?> < p > Olá, <?php echo $nome ; ?> . </ p > app/views/hello/index.ctp app/controllers/hello_controller.php
25.
Método set Ométodo set usado nos controladores serve para enviar dados do controlador para a visão. Exemplos: $this ->set( 'cor' , 'azul' ); $this ->set( 'colecoes' , $this ->Colecao->findAll());
26.
Layouts Layout padrão:cake/libs/view/layouts/default.ctp Layout personalizado: app\views\layouts\default.ctp < html > < head > < title > Aplicação Exemplo </ title > </ head > < body > < h1 > Minha Aplicação </ h1 > <?php echo $content_for_layout ; ?> </ body > </ html >
Paginação <!-- Showsthe next and previous links --> <?php echo $paginator ->prev( '« Previous ' , null, null, array ( 'class' => 'disabled' )); echo $paginator ->next( ' Next »' , null, null, array ( 'class' => 'disabled' )); ?> <!-- prints X of Y, where X is current page and Y is number of pages --> <?php echo $paginator ->counter(); ?> Na visão:
33.
Paginação O contadorpode ser personalizado: <?php echo $paginator ->counter( array ( 'format' => ' Página %page% de %pages%, mostrando %current% registros de um total de %count%. Registro inicial: %start%. Registro final: %end% ' )); ?>
34.
Validação <?php class User extends AppModel { var $name = 'User' ; var $validate = array ( 'login' => 'alphaNumeric' , 'email' => 'email' , 'born' => 'date' ); } ?>
35.
Validação <?php class Genero extends AppModel { var $name = 'Genero' ; var $useTable = 'generos' ; var $displayField = 'descricao' ; var $validate = array ( 'descricao' => VALID_NOT_EMPTY); //... } ?>
Rotas Definições derota dizem ao CakePHP como mapear URLs para ações de controladores. Comportamento padrão: A URL "/controller/action/var1/var2" é mapeada para Controller::action($var1, $var2) Tal comportamento pode ser personalizado.
Flash Usado paracomunicação entre ações. Contém uma string contendo informação ou erro. Existe somente durante uma requisição. No controller: $this ->Session->setFlash( 'OK' ); Na view: <?php if ( $session ->check( 'Message.flash' )): $session ->flash(); endif ; ?>
46.
Logging Usar: $this->log( "Ops, algo não deu certo!" ); $this ->log( 'mensagem de debug.' , LOG_DEBUG); Verificar em: app/tmp/logs/error.log app/tmp/logs/debug.log Níveis de log: LOG_ERROR LOG_DEBUG
47.
Model Normalmente representamtabelas no banco de dados, mas também podem ser entradas LDAP, feeds RSS, arquivos no sistema, etc.
48.
Model <?php class Pessoa extends AppModel { } ?> app/models/pessoa.php
49.
Personalização de pluraisPode-se ajustar a pluralização no arquivo: /app/config/inflections.php Exemplo: $irregularPlural = array ( 'valor' => 'valores' );
50.
Controller <?php class PessoasController extends AppController { var $scaffold ; } ?> app/controllers/pessoas_controller.php
51.
View Obtém dadosdo controller e os usa para gerar a apresentação para o cliente. Views são normalmente HTML, mas também podem ser: PDF, XML, objetos JSON, etc.
52.
Layouts Por padrão,cada visão gerada pelo controlador é colocada dentro de um layout.
53.
Helpers de VisãoAjudam na lógica de apresentação. Compartilhados entre várias visões.
Compartilhamento de CódigoControladores, Helpers e Modelos possuem uma super-classe que permitem o compartilhamento de código entre vários controladores, helpers ou modelos: AppController – /app/app_controller.php AppHelper – /app/app_helper.php AppModel – /app/app_model.php
56.
Controller - CallbacksControladores possuem callbacks . E o que são callbacks ? São funções/métodos que ao invés de serem chamados diretamente por nós, são executadas pelo sistema/framework quando necessário. Callbacks são usados quando precisamos de alguma lógica entre operações do próprio CakePHP.
57.
Controller - CallbacksCallbacks disponíveis nos controladores: beforeFilter() - executado antes de qualquer ação do controlador. beforeRender() - executado após a lógica do controlador, mas antes da geração da visão. afterFilter() - executado após toda a lógica do controlador e geração da visão. afterRender() - A mesma coisa que afterFilter(), exceto quando há alguma lógica após uma chamada explícita a render() na ação do controller.
58.
Model – Callbacks beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()
59.
Autenticação Criar tabelausuarios Campo email - varchar(100) Campo senha – varchar(40) Criar modelo, visão e controlador para Usuario
Permissões de AcessoACL – Access Control Lists ARO – Access Request Objects Usuários ou Grupos Exemplo: admin, usuario, convidado ACO – Access Control Objects Controladores, ações Exemplo: Filme, Genero ACL decide se um ARO pode acessar um ACO. Ou seja: se um usuário tem acesso a uma ação C, R, U ou D do ACO.
ACL cd app..\cake\console\cake schema run create DbAcl Criando as tabelas de ACL:
70.
Referências The Cookbookhttp://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