CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework...

70

Transcript of CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework...

Page 1: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models
Page 2: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 3: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Entendendo BancoImagine que vc tenha uma biblioteca e queira

fazer um catalogo dos seus livros

ID Autor Nascido Titulo Pag Editora1 Roberto 1967 Editor VI 80 Novatec2 Roberto 1967 Python 300 Novatec3 Bira 1992 MMQSG24 NoisqDa4 Bira 1992 MMQSG 2 242 NoisqDa5 Luis 1976 CSS 90 Novatec6 Bira 1992 MMQSG 3 243 NoisqDa

Observe que tem dados sendo armazenados mais de uma vez

Page 4: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Entendendo BancoAssim separamos o banco em tabelas

Tabela Autor Tabela EditoraId NomeAno Id Nome1 Roberto 1967 1 Novatec2 Bira 1992 2 NoisqDa3 Luis 1976

Tabela LivroId NomePag Autor_idEditora_id1 Editor VI 80 1 12 Python 300 1 13 MMQSG 24 2 24 MMQSG 2 242 2 25 CSS 90 3 16 MMQSG 3 243 2 2

Page 5: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

RelacionamentosTabelas possuem relacionamentos

N

publica 1

1

escreve

N

AUTOR

LIVRO

EDITORA

Page 6: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Exemplos de Bancos

ComputadorIdNome

HDIdFabricanteTamanhoTipoComputador_id

MonitorIdPolegadaFabricante

Placa de VideoIdFabricanteModeloComputador_id

MemoriaIdTamanhoFabricanteFrequencia

Page 7: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Exemplos de Bancos

TemporadasIdNumeroSeriado_id

SeriadosIdNomeStatusDia da Semana Episodio

IdNomeNumeroTemporada_idDia do Mes

Page 8: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Exemplos de Bancos

UsuarioIdNomeSenhaNascimentoEmail

PostsIdTituloCorpoDataUsuario_id

ComentariosIdComentarioDataPost_idUsuario_id

Page 9: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Exemplos de Bancos

RodadaIdNumeroTurno

CampeonatoIdAnoNomeData

JogoIdTituloSubtituloCorpoLocal

TimeIdNome

IntegranteIdNome

Page 10: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Exemplos de Bancos

RodadaIdNumeroTurno

CampeonatoIdAnoNomeData

JogoIdTituloSubtituloCorpoLocal

TimeIdNome

IntegranteIdNome

Page 11: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Nosso Banco

Postsidtitlebodycreatedmodified

Usersidusernamepassword

Commentsidbodycreatedpost_iduser_id

Convenções:Usaremos as conevencões do Cake para facilitar a minha vida.-Nome das tabelas- created e modified- post_id e user_id- username e password

Page 12: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Criando nosso bancoUtilizando o mysql, fazemos:

Para logar no banco: # mysql –u root – p

Criando o novo banco: mysql> create database aulacake;

Criando o meu usuario: mysql> grant all on aulacake.* to aulacake'@‘localhost' identified by 'biraviadin';

Para administrar o banco usaremos o phpmyadmin

Page 13: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

phpMyAdmin

Page 14: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 15: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

CakePHPCakePHP eh um framework para Aplicações WebFramework de Software:

compreende de um conjunto de classes implementadas em uma linguagem específica, usadas para auxiliar o desenvolvimento de software. (Wikipedia)

Começou em 2005Ultima versão estável 1.3.0Site: cakephp.org

Page 16: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Site do CakePHP

Page 17: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Arquitetura MVC

O CakePHP utiliza a arquitetura MVCBasicamente eh o seguinte:

Models: são os responsáveis por se comunicar com o banco, para salvar, modificar e deletar os dados

Controller: são eles quem mandam os models se comunicarem com o banco, recebe a resposta e manda para os views

Views: são eles quem mostram para os usuários o resultados das consultas pedidas ao banco

Page 18: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 19: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Baixando o CakePHP

Para baixar o Cake basta ir no site e baixar a ultima versao

Você vai escolher entre tar.gz (834KB) e o zip (1.3MB), dah na msm

Descompacte-o no seu diretório webMude o nome da pasta e acesse ela no seu

browserEx: http://pahnois/~2005100955/aulacake

Page 20: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Primeira visao do site

Page 21: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Possivel Erro

O cake pode dar um erro quando usado com o modulo userdir do apache

Se a sua url for desse tipo: http://meusite/~eu/appdocake/

eh possível que o site não abra. Para corrigir o erro devemos modificar um arquivo oculto chamado .htaccess localizado na que vc descompactou.

Page 22: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Modificando o .htacessFaça a seguinte modificacao no arquivo:

<IfModule mod_rewrite.c> RewriteEngine on RewriteBase /~eu/appdocake RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L]</IfModule>

Faça a mesma modificação no arquivo app/webroot/.htaccess

Page 23: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Core + APPNa pasta que vc descompactou

encontraremos as subpastas: app – eh onde fica o seu site cake – eh o coração (core) do cake plugins – plugins para facilitar ainda mais vendors – não sei e nem quero saber por enquanto

O core contem as informações vitais das suas apps. Por isso não cheguem perto se não sabem o que estão fazendo.

Um core pode ter varias apps

Page 24: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Os 3 warnings de start

Quando vc abre o seu site vai ver um exemplo pronto jah, com o padrao do cakephp

Verá também possíveis mensagens em amarelo, são elas:

Please change the value of 'Security.salt‘ Your tmp directory is not writable Your database configuration file is NOT present

Page 25: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Security SaltNo arquivo app/config/core.php,

possivelmente na linha 165, terá: Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

O Security Salt serve para a geração de Hashes, sempre que precisar gerar um, o cake vai pegar o valor dessa string

Pode usar qualquer string, contanto que não seja facilmente adivinhada

Isso eh utilizado por exemplo, na criação do hash da senhas de usuários do site

Page 26: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Diretorio tmp

O diretório tmp da sua app, deve ser writableSe ele ainda não estiver, basta usar o

comando chmod:

chmod -R 777 app/tmp

Page 27: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Configuracao do BancoPor ultimo, devemos configurar o bancoEdite o arquivo app/config/database.php.default

var $default = array(

'driver' => 'mysql',

'persistent' => false,

'host' => ‘pahnois',

'login' => ‘aulacake',

'password' => ‘biraviadin',

'database' => ‘aulacake',

'prefix' => '', );

Renomeie o arquivo para database.php

Page 28: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Modulo mod_rewrite

Para que o cakephp funcione o modulo rewrite do apache deve estar habilitado

Voce pode usar o comando apache2ctl -M para saber se o modulo esta sendo usado

Procure na resposta do comando a linha: rewrite_module (shared)

Page 29: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 30: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

ModelsVamos então criar os nossos modelsPor convenção cada tabela no banco terá um

model correspondente e o nome do model será o nome da tabela no singular

Para criar um model, crie um arquivo app/models/<nomedatabela>.php

Todos os models são classes em php e herdam da classe AppModel

Vamos criar o model da tabela post no próximo slide

Page 31: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Model de PostArquivo app/models/post.php

<?php

class Post extends AppModel {

var $name = 'Post';

}

?>

Page 32: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

ControllersVamos então criar os nossos controllersPor convenção cada tabela terá um controller

correspondente e o nome do controller será o nome da tabela no plural + controller

Para criar um controller, crie um arquivo app/controllers/<nomedatabela>_controller.php

Todos os controllers são classes em php e herdam da classe AppController

Vamos criar o controller da tabela post no próximo slide

Page 33: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Controller de PostArquivo app/models/post_controller.php

<?php

class PostsController extends AppController {

var $name = 'Posts';

}

?>

Page 34: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Metodos

Todo controller eh composto de métodos, esses métodos são as funções da classe

Cada método pode estar relacionado a algum view

Os métodos são chamados também de actions

Os metodos mais comuns são: index, add, view e delete

Page 35: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Action IndexArquivo app/models/post_controller.php

<?php

class PostsController extends AppController {

var $name = 'Posts';

function index() {

$this->set('posts', $this->Post->find('all'));

}

}

?>

Page 36: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Metodos jah prontosNo arquivo app/models/controller.php temos

todos os metodos prontos pra vc, ou seja, não enconste lah

Todos os outros controller herdam de AppController, e AppController herda tudo de Controller

Métodos mais comuns: set redirect paginate requestAction

Temos também os métodos que aparentam ser de controllers, mas na verdade são de models

Page 37: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Metodos de Controllersset

cria uma variável para o seu view $this->set( ‘bira’, ‘viadin’) cria uma variavel $bira cujo valor eh viadin

paginate serve para fazer paginação dos dados recebidos do model,

serah visto mais a frente

requestAction chama um action de qualquer controller e recebe o

retorno dele $dado =$this->requestAction(‘/comments/primeiro’) joga o retorno do metodo ‘primeiro’ do controller

‘comments’ na variavel $dado

Page 38: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Metodos de Modelsfind ($type, $params)

pede ao banco os dados do Model os valores de $type pode ser:

‘first’ - retorna apenas o primeiro resultado encontrado

‘count’ - retorna a quantidade de resultados encontrados

‘all’ - retorna todos os resultados

‘list’ - retorna todos os resultados em uma pequena lista

‘neighbors’ - retorna o resultado anterior e o proximo do pesquisado

$params vai ser um array com as opcoes da buscaarray( 'conditions' => array('Model.field' => $valor),

'fields' => array('Model.field1', ‘Model.field2’),

'order' => array('Model.created', 'Model.field3 DESC'),

'limit' => n )

Page 39: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Outros metodos de ModelsfindAllBy<campo> ( ‘valor’ )findBy<campo> ( ‘valor’ )query ( ‘SELECT * FROM post;’ )read ( ‘nome’ , $valor )create ( )save ( $array )saveAll ( $arrays )delete ( $id )deleteAll ( $conditions )

Page 40: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

ViewsOs views ficam localizados na pasta app/views/Dentro dessa pasta existem subpastas, cada

controller terá uma subpasta com seu nomePor convenção a pasta será igual o nome da

tabela do banco no pluralCada view será um arquivo .ctp dentro da pasta

do controller, e deverá ter um action criado no controller

Se voce criou a function index no controller do post, agora vamos criar o view index.ctp em app/views/posts

Page 41: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

View IndexArquivo app/views/posts/index.ctp

<pre>

<?php

print_r($posts)

?>

</pre>

Entre no site para ver o resultado: http://pahnois/~2005100955/aulacake/posts/index/

Page 42: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Url do Cakehttp://www.inf.ufes.br/~mssoares/suportao/posts/view/17

site minhaApp Action

Controller Parametros

Page 43: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Adicionando DadosColoque o código abaixo no controller do post

function add() {

if (!empty($this->data)) {

if ($this->Post->save($this->data)) {

$this->Session->setFlash(‘Seu Post foi salvo.');

$this->redirect (array('action' => 'index'));

}

}

}

Page 44: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Adicionando DadosCrie o view add.ctp

<h1>Add Post</h1>

<?php

echo $form->create('Post');

echo $form->input('title');

echo $form->input('body', array('rows' => '3'));

echo $form->end(‘Salvar Post');

?>

Page 45: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 46: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

HelpersO nome já diz tudo, estão aqui para ajudarOs helpers padrões estao na pasta

cake/libs/views/helpers/ ajax paginator cache RSS form session html text js time javascript xml number

Page 47: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper FormCriando um formulario:echo $form->create('Post');

Substitui o código html<form id="PostAddForm" method="post" action="/aulacake/posts/add">

Fechando um formulárioecho $form->end(‘Salvar');

Substitui o código html<div class="submit"><input type="submit" value=“Salvar" /></div></form>

Page 48: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper Forminput ( $coluna , array $options )

echo $form->input('body', array('rows' => '5'));

Dependendo do tipo da coluna o cake ajeita o formulário para vc

string text boolean, tinyint(1) checkbox text textarea password password date dia mes ano selects datetime dia mes ano hora minuto selects time hora minuto selects

Page 49: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper Forminput ( $coluna , array $options ) Os valores para o array $options pode ser:

array(

'type' => 'file‘,

'options' => array(1,2,3,4,5),

'label' => 'The User Alias‘,

'default'=>'Sugar‘,

'rows' => '5', 'cols' => '5‘,

'empty' => '(choose one)'

)

Page 50: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper Forminput ( $coluna , array $options ) Os valores para o array $options pode ser:

array(

'type' => 'file‘,

'options' => array(1,2,3,4,5),

'label' => 'The User Alias‘,

'default'=>'Sugar‘,

'rows' => '5', 'cols' => '5‘,

'empty' => '(choose one)'

)

Page 51: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper HtmlCSS

echo $html->css('cake.generic');

Substitui o código html<link rel="stylesheet" type="text/css" href="/aulacake/css/cake.generic.css" />

Normalmente essa echo fica no arquivo, cake/libs/views/default.ctp

Copie esse arquivo para app/views/layout/Nesse arquivo fica o layout da sua aplicação,

o layout eh a parte que não muda no seu site

Page 52: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper HtmlImage

echo $html->image("recipes/6.jpg", array( "alt" => "Brownies", 'url' => ‘/recipes/view/6’ ));

Substitui o código html<a href="/recipes/view/6"> <img src="/img/recipes/6.jpg" alt="Brownies" /> </a>

Imageecho $html->link('Enter', '/pages/home', array('class'=>'button','target'=>'_blank'))

Substitui o código html<a href="/pages/home" class="button" target="_blank">Enter</a>

Page 53: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper HtmlOutros métodos do helper do html

charset docType meta style tag div para script url

Page 54: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper RSSAntes de mais nada, vc deve adicionar uma

linha em app/config/routes.phpRouter::parseExtensions('rss');

Adicione em app/controllers/posts_controller.phpvar $components = array('RequestHandler');

Modifique o método index de posts:function index(){

if( $this->RequestHandler->isRss() ){ $posts = $this->Post->find('all', array('order' => 'Post.created DESC')); $this->set(compact('posts')); $this->set('channel',array('title'=>'Aula de Cake - Posts'));} else { $this->set('posts', $this->Post->find('all'));}

}

Page 55: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper RSS

Page 56: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Helper TimeDeixa um formato date time mais bonito:

nice ( $date ) Tue, Jan 1st 2008, 19:25 niceShort ( $date ) Jan 1st 2008, 19:25

Today, 19:25 timeAgoInWords($date) on 21/01/08

3 months, 3 weeks, 2 days ago 7 minutes ago 2 seconds ago

Vc pode mudar o padrao dessas funcoes em cake/libs/views/helpers/time.php

O recomendado eh que vc salve esse helper na app e modifique lah

Page 57: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Data ValidationUma coisa que vai te ajudar no cake eh validar os

dados antes de add algoA validação eh tratada nos Models, abra o model

do post e ponha o código:var $validate = array(

'title' => array(

'aplhanumeric' => array(

'rule' => array('alphanumeric'),

'message' => 'O titulo soh pode ter numeros e letras’ ), ),

'body' => array(

'notEmpty' => array(

'rule' => array('notEmpty'),

'message' => 'Nao deixe o corpo do post em branco’ ), ),

);

Page 58: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Testando a Validation

Page 59: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Tipos de ValidationVc pode colocar expressões regulares na

validação, mas para facilitar sua vida o cake jah tem algumas prontas:

alphaNumeric extension between file blank ip boolean isUnique cc minLength comparison notEmpty date phone decimal postal email url equalTo

Page 60: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 61: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Preparar o Cake BakePrimeiro temos que alterar a variável de

ambiente PATH, para ela achar o caminho do console e do php

Console eh onde fica o executável cakecake bake eh o camando que vai fazer tudo

por vc$ PATH=$PATH:/home/2005100955/aulacake/cake/console/

$ export PATH

Agora vamos botar o bolo no forno

Page 62: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Bakeando o siteNo terminal, entre na pasta app

$ cd ~/pastaweb/aulacake/app/

Rode o comando:

$ cake bake

Escolha a opção M de modelFaça a mesma coisa para os tres modelsDepois faça para controllers e views

Page 63: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Bakeando o site

Agora acesse o siteTudo esta pronto seguindo um padrão do

cakephpVc pode alterar o padrão do seu jeito, assim vc

acaba de bakear o site e jah tah tudo pronto

Page 64: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Sumario

Banco de DadosO que eh CakePHPInstalando o CakeModels, Controllers e ViewsMais ferramentas do CakePHPCake Bake – a magica do CakePHP

Page 65: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

ComponentsOs components provêm varias funcionalidades

que são usadas normalmenteOs components padrões estão na pasta

cake/libs/views/components/ acl auth cookie email requesthandler security session

Page 66: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Components AuthA primeira coisa a ser fazer eh ativar o

componente no controller:var $components = array('Auth');

Para ativar em todos os controllers, basta adicionar essa linha em AppController

Agora todo o seu site esta bloqueado para quem não esta logado

Entao vamos fazer a tela de login

Page 67: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Components AuthNo controller User, crie os dois actions:

login function login () { }

logoutfunction logout (){

$this->redirect($this->Auth->logout());

}

Agora crie o view de loginOBS: logout não precisará de um view

Page 68: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Components AuthArquivo app/views/users/logint.ctp

<?php

echo $session->flash('auth');

echo $form->create('User', array('action' => 'login'));

echo $form->input('username');

echo $form->input('password');

echo $form->end('Login');

?>

Page 69: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Components AuthMas e se eu não quiser que todo o meu site

seja bloqueado para não usersColoque no controller que não queira ser

bloqueado a função beforeFilterDentro de allow coloque as actions que serão

permitidas a visitantesExemplo em app/controllers/users_controller.php

function beforeFilter() {

$this->Auth->allow('add');

}

Page 70: CakePHP na pratica - suporte.inf.ufes.br · 5 Luis 1976 CSS 90 Novatec ... CakePHP eh um framework para Aplicações Web ... Vamos então criar os nossos models

Por ultimo: RotasNo arquivo app/config/routes.php voce pode

remodelar a url do site

Router::connect( '/logar', array('controller' => ‘users', 'action' => 'login') );

Router::connect( '/Comentarios/*', array('controller' => ‘comments', 'action' => ‘index') );

Router::connect( '/Postados/:action/*', array('controller' => ‘posts') );