47
Seminário 2011/2012 cakePHP Arlindo Santos ([email protected])

Cakephp - framework de desenvolvimento de aplicações Web em PHP

Embed Size (px)

DESCRIPTION

Apresentação da framework de desenvolvimento de aplicações web - cakePHP. Aprender a criar uma aplicação web em PHP usando o CakePHP. - Instalação? - Organização? - Como criar um Blog? - Autenticação? - Multi-utilizador?

Citation preview

Page 1: Cakephp - framework de desenvolvimento de aplicações Web em PHP

Seminário 2011/2012

cakePHPArlindo Santos ([email protected])

Page 2: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• O CakePHP teve seu desenvolvimento iniciado por Michal Tartarynowicz em 2005.

• Baseado nas ideias do framework Ruby on Rails, e a principal meta é ser um framework estruturado que permita programadores PHP de todos os níveis desenvolverem aplicações web robustas e sem perda de flexibilidade.

• http://www.cakephp.org• Cookbook -

http://book.cakephp.org/2.0/pt/index.html

Start!

12-04-23Arlindo Santos 2

Page 3: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

Fluxo - funcionamento

12-04-23Arlindo Santos 3

Page 4: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Baseado em arquitetura MVC– Facilita o desenvolvimento e manutenção de aplicações;– Melhor organização do código-fonte;– Facilita o trabalho em equipe;– Abstrai o programador de tarefas repetitivas e complexas.

• Licença Flexível– O CakePHP é licenciado sob a licença MIT, muito mais flexível que a GPL e a própria

BSD.• Compatibilidade com PHP4 e PHP5

– Como a maioria dos servidores web usam a versão 4.0 do PHP esta é uma vantagem significativa do CakePHP em relação a outros frameworks PHP, como é o caso do Symfony ou do Zend Framework.

• Validação de campos– O CakePHP possui formas de validar dados digitados pelos utilizadores em

formulários ou URLs. Isso ajuda o programador a evitar dados incorretos ou problemas de segurança.

• Scaffolding– É um recurso que analisa uma tabela na base de dados e cria automaticamente

botões e formulários para as operações básicas de inserção, alteração, e eliminação de dados.

Características

12-04-23Arlindo Santos 4

Page 5: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Listas de controle de acesso (ACL)– Permite a gestão de algo (geralmente utilizadores)– Permite gerir algo que é desejado (aplicações, por exemplo)– Não é autenticação de utilizadores

• Componentes para:– Segurança;– Sessões;– Tratamento de requisições– Permite o desenvolvimento de componentes específicos adicionais ao ambiente

• Helpers– Existem helpers para auxiliar na geração de HTML, formulários, JavaScript e AJAX.

Novos helpers podem ser criados ou reutilizados em outros projetos.• Geração de código-fonte

– O CakePHP apresenta uma ferramenta chamada bake, que permite a criação de diretórios da aplicação, além da geração de código CRUD. CRUD é um acrônimo para Create, Retrieve, Update e Delete.

Características

12-04-23Arlindo Santos 5

Page 6: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• O CakePHP pode ser utilizado em qualquer plataforma operacional com suporte ao interpretador PHP;

• Servidor Web Apache;• PHP 4.3.2 ou superior;• Editor PHP de sua preferência;• DB Designer ou outra ferramenta de modelagem

de dados;• Uma base de dados:

– A versão estável do framework suporta MySQL, PostgreSQL e camada de abstração de banco de dados chamada ADOdb.

Requisitos

12-04-23Arlindo Santos 6

Page 7: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• /app – Diretório onde ficará a aplicação desenvolvida– /config – Arquivos de configuração, DB, etc..– /controllers – Controladores da aplicação– /index.php – Página inicial da aplicação– /models – Modelos da aplicação– /plugins – Plugins que podem ser adicionados– /tmp – Usado para cache e logs– /vendors – Bibliotecas de terceiros– /views – Visões da aplicação

• /elements – Elementos, pedaços da visão• /errors – Páginas de erros customizadas• /helpers – Ajudantes para gerar código• /layouts – Arquivos de layout• /pages – Visões estáticas

– /webroot – DocumentRoot para aplicação• /css – Arquivos css• /files – Arquivos comuns• /img – Imagens• /js – Javascripts (AJAX)

• /lib– /cake – Código-fonte do cake

• /plugins • /vendors – Bibliotecas de terceiros• index.php – Página inicial do framework

Organização dos directórios

12-04-23Arlindo Santos 7

Page 8: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Descarregar a versão estável da ferramenta em http://www.cakephp.org/downloads

• Descompactar/extrair no diretório raiz do seu servidor web

• Renomear o diretório para um nome mais usual/curto (cake)

• Pronto, já está funcionando: http://localhost/cake

Passos para a instalação

12-04-23Arlindo Santos 8

Page 9: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• http://book.cakephp.org/2.0/pt/installation.html

• Permissões– O diretório /app/tmp com direitos de escrita

pelo utilizador.– Executar http://localhost/cake

Instalação

12-04-23Arlindo Santos 9

Page 10: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

– app/Config/core.php– Timezone

• date_default_timezone_set('UTC');

– Security.salt - texto aleatório utilizado para os metodos de criptografia de segurança.

• Alterar para um valor diferente.

– Security.cipherSeed - Uma sequência númerica aleatória (somente dígitos) usada para criptografar/descriptografar strings.

• Alterar para um valor diferente.

Instalação

12-04-23Arlindo Santos 10

Page 11: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Activação do mod::rewrite.– http://

book.cakephp.org/2.0/pt/installation/advanced-installation.html

– mod_rewrite é um módulo do apache que é responsável pela reescrita de urls, e tormas estas mais amigáveis para o utilizador

– Para que a dica deste post funcione é necessário que este módulo esteja ativo no servidor apache.

– Associado a este conceito existe um ficheiro chamado .htaccess onde ´´e possível escrever as reguintes regras:

RewriteEngine OnRewriteCond %{SCRIPT_FILENAME} !-fRewriteCond %{SCRIPT_FILENAME} !-dRewriteRule ^(.*)$ index.php?page=$1

Instalação

12-04-23Arlindo Santos 11

Page 12: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Todas as tabelas devem estar no plural– Ex: Utilizadores, Comentarios

• A chave primária para todas as tabelas deve ser o campo “id”– Preferencialmente estes campos devem ter algum mecanismo de

geração de códigos-fonte, como a opção auto_increment do MySQL.

• Chave estrangeira no singular– Para utilizar chave estrangeira, esta deve possuir nome da tabela no

singular acrescido do campo “id”. Exemplo: utilizador_id.

• Relacionamento de n-n deve ser organizado em ordem alfabética– Primeiro nome no singular acrescido de um “_” e o nome da segunda

tabela no plural. Exemplo: livro_utilizadores.

Base de dados: considerações

12-04-23Arlindo Santos 12

Page 13: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• http://book.cakephp.org/2.0/pt/getting-started.html • MySQL

– Criar uma base de dados “blog”– Executar o seguinte código SQL no mysqladmin:-- Primeiro, criamos nossa tabela de postsCREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL);

-- Agora inserimos alguns posts para testarINSERT INTO posts (title, body, created) VALUES ('The title', 'This is the post body.', NOW());INSERT INTO posts (title, body, created) VALUES ('A title once again', 'And the post body follows.', NOW());INSERT INTO posts (title, body, created) VALUES ('Title strikes back', 'This is really exciting! Not.', NOW());

Criar um site - BLOG

12-04-23Arlindo Santos 13

Page 14: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Configuração da base de dados– /app/Config/database.php.default.

• Copie este ficheiro no mesmo diretório renomeando-o para database.php.

• Configure com os dados corretos.

public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '', 'login' => ‘?', 'password' => ‘?', 'database' => ‘blog', 'schema' => '', 'prefix' => '', 'encoding' => '');Veja o que aconteceu ao seu site! Não tem erros!

Criar um site - BLOG

12-04-23Arlindo Santos 14

Page 15: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um Model Post– /app/Model/Post.php

• Insira o seguinte código:

class Post extends AppModel { public $name = 'Post';}

• A nomenclatura da classe segue uma convenção que é muito importante no CakePHP. – Se o model é Post, o CakePHP pode deduz que será

usado um PostsController, e que manipulará os dados de uma tabela da base de dados chamada posts.

Criar um site - BLOG

12-04-23Arlindo Santos 15

Page 16: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um Controller Post– /app/Controller/PostsController.php

• Insira o seguinte código:

class PostsController extends AppController {public $helpers = array ('Html','Form');public $name = 'Posts';

function index() { $this->set('posts', $this->Post->find('all')); }

}

• Definindo a função index() em nosso PostsController, os utilizadores podem aceder visitando o endereço www.exemplo.com/posts/index

• De maneira semelhante, se definirmos um método chamado foobar() dentro do controller, os utilizadores deveriam ser capazes de acede-lo pelo endereço www.exemplo.com/posts/foobar

Criar um site - BLOG

12-04-23Arlindo Santos 16

Page 17: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um View Post– Os ficheiros de view do Cake são

armazenados na pasta /app/View dentro de uma pasta com o mesmo nome do controller.

– O nome do ficheiro deve ter o mesmo nome da action.

Criar um site - BLOG

12-04-23Arlindo Santos 17

Page 18: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um View Post– Insira o seguinte código:

<!-- File: /app/View/Posts/index.ctp -->

<h1>Posts do Blog</h1><table> <tr> <th>Id</th> <th>Título</th> <th>Data de Criação</th> </tr>

<!-- Aqui é onde nós percorremos nossa matriz $posts, imprimindo as informações dos posts -->

<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'],array('controller' => 'posts', 'action' => 'view', $post['Post']['id'])); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?>

</table>

Criar um site - BLOG

12-04-23Arlindo Santos 18

Page 19: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Testar:– http://localhost/cake/posts

• Clicar no links…– http://localhost/cake/posts/view/1– Dá erro, pois… resolver…– Está à espera que existe uma action view, e

como consequência, uma página view.ctp. Também é enviado um parâmetro com o valor 1.

• Importante reconhecer esta sintaxe:– url/{action}/{param1}/{param2}/{param3}/…

Criar um site - BLOG

12-04-23Arlindo Santos 19

Page 20: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Acrescentar o código no controller

public function view($id = null) { $this->Post->id = $id; $this->set('post', $this->Post->read()); }

• Criar um novo view

<!-- File: /app/View/Posts/view.ctp -->

<h1><?php echo $post['Post']['title']?></h1><p><small>Created: <?php echo $post['Post']['created']?></small></p><p><?php echo $post['Post']['body']?></p>

Criar um site - BLOG

12-04-23Arlindo Santos 20

Page 21: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Testar:– http://localhost/cake/posts

Criar um site - BLOG

12-04-23Arlindo Santos 21

Page 22: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Adiciona Posts– Controller

• Insira o seguinte código:

… public function add() { if ($this->request->is('post')) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('Your post has been saved.'); $this->redirect(array('action' => 'index')); } } }

– $this->request->data – Dados enviados pelo formulário.

Criar um site - BLOG

12-04-23Arlindo Santos 22

Page 23: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Adiciona Posts– Controller:

• Para trabalhar com sessões  o componente SessionComponent e o helper SessionHelper são necessários.

• O componente Session já inclui tudo!

<?phpclass PostsController extends AppController {

public $components = array('Session');…

Criar um site - BLOG

12-04-23Arlindo Santos 23

Page 24: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um View Post - Adicionar um POST– /app/View/Post/add.php

• Insira o seguinte código:

<!-- File: /app/View/Posts/add.ctp -->

<h1>Add Post</h1><?php//<form id="PostAddForm" method="post" action="/posts/add">echo $this->Form->create('Post'); echo $this->Form->input('title');echo $this->Form->input('body', array('rows' => '3'));echo $this->Form->end('Save Post');?>

– /app/View/Post/index.ctp • Insira o seguinte código:

<?php echo $this->Html->link('Add Post', array('controller' => 'posts', 'action' => 'add')); ?>

Criar um site - BLOG

12-04-23Arlindo Santos 24

Page 25: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Validação dos dados submetidos pelo utilizador– Rules

• http://book.cakephp.org/1.3/view/1143/Data-Validation• http://book.cakephp.org/2.0/en/models/data-validation.html

– Model• Insira o seguinte código:

class Post extends AppModel { public $name = 'Post';

public $validate = array( 'title' => array( 'rule' => 'notEmpty' ), 'body' => array( 'rule' => 'notEmpty' ) );}

Criar um site - BLOG

12-04-23Arlindo Santos 25

Page 26: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Editar Post–  Controller

function edit($id = null) { $this->Post->id = $id; if ($this->request->is('get')) { $this->request->data = $this->Post->read(); } else { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('Your post has been updated.'); $this->redirect(array('action' => 'index')); } }}

Criar um site - BLOG

12-04-23Arlindo Santos 26

Page 27: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Crie um View Post – Editar um Post– /app/View/Post/edit.php

• Insira o seguinte código:

<!-- File: /app/View/Posts/edit.ctp -->

<h1>Edit Post</h1><?php echo $this->Form->create('Post', array('action' => 'edit')); echo $this->Form->input('title'); echo $this->Form->input('body', array('rows' => '3')); echo $this->Form->input('id', array('type' => 'hidden')); //muito importante!!! echo $this->Form->end('Save Post');?>

Criar um site - BLOG

12-04-23Arlindo Santos 27

Page 28: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Editar a View Post para permitir que utilizador realize as ações:

<!-- File: /app/View/Posts/index.ctp (links para edição adicionados) -->

<h1>Blog posts</h1><p><?php echo $this->Html->link("Add Post", array('action' => 'add')); ?></p><table> <tr> <th>Id</th> <th>Title</th> <th>Action</th> <th>Created</th> </tr>

<!-- Aqui é onde nós percorremos nossa matriz $posts, imprimindoas informações dos posts -->

<?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id']));?> </td> <td> <?php echo $this->Form->postLink( 'Delete', array('action' => 'delete', $post['Post']['id']), array('confirm' => 'Are you sure?') )?> <?php echo $this->Html->link('Edit', array('action' => 'edit', $post['Post']['id']));?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr><?php endforeach; ?>

</table>

Criar um site - BLOG

12-04-23Arlindo Santos 28

Page 29: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Apagar o Post– Controller:

function delete($id) { if (!$this->request->is('post')) { throw new MethodNotAllowedException(); } if ($this->Post->delete($id)) { $this->Session->setFlash('The post with id: ' . $id . ' has been

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

– Se o utilizador tentar apagar usando uma requisição do tipo GET, é criada uma excepção – questões de segurança!!!

– O helper FormHelper fornece o método postLink()

Criar um site - BLOG

12-04-23Arlindo Santos 29

Page 30: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Router (redirecionamento)–  /app/Config/routes.php

Router::connect('/', array('controller' => 'posts', 'action' => 'index'));

– Tornar a URL mais amigável para o utilizador– Neste exemplo, retira-se a necessidade de

adicionar “posts” na URL

Criar um site - BLOG

12-04-23Arlindo Santos 30

Page 31: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Testar:– http://localhost/cake

– E agora … questões?• E se eu pretender fazer ….

Criar um site - BLOG

12-04-23Arlindo Santos 31

Page 32: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Exercícios:1. Criar uma página “Olá mundo” quando o utilizador digita a

URL “http://localhost/cake/welcome/

2. Posts:1. Permitir que o utilizador possa introduzir uma tag associadas a cada

post.2. Permitir que o utilizador possa introduzir várias tags associadas a

cada post.

Nota:1. Planear2. Model3. Controller4. View

Criar um site - BLOG

12-04-23Arlindo Santos 32

Page 33: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Autenticaçãohttp://book.cakephp.org/2.0/pt/tutorials-and-examples/blog-auth-example/auth.html

Criar um site - BLOG

12-04-23Arlindo Santos 33

Page 34: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Autenticação– E se o BLOG permite múltiplos utilizadores?– Então:

• Criar a tabela• Criar o model

– Validação.

• Criar o Controller– Componente Auth– Método beforefilter: será chamado antes de cada ação.– É possível editar o AppController!– Definir regras de autotrização

• Criar os Views

Criar um site - BLOG

12-04-23Arlindo Santos 34

Page 35: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

<?php// app/Controller/UsersController.phpclass UsersController extends AppController {

public function beforeFilter() {parent::beforeFilter();$this->Auth->allow('register', 'login'); // Letting users register themselves

}

public function login() {if ($this->Auth->login()) {

$this->Session->write('user', $this->Auth->user()); $this->redirect($this->Auth->redirect());

} else {$this->Session->setFlash(__('Invalid username or password, try again'));

}}

public function logout() {$this->Session->destroy('user'); $this->redirect($this->Auth->logout());

}

public function register() { if ($this->request->is('post')) { $this->User->create(); if ($this->User->save($this->request->data)) { $this->Session->setFlash(__('The user has been saved')); $this->redirect(array('controller' =>'posts', 'action' => 'index'));

} else { $this->Session->setFlash(__('The user could not be saved. Please, try again.')); } } }}?>

Criar um site - BLOG

12-04-23Arlindo Santos 35

Page 36: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

<?php// app/Model/User.php

App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel { public $name = 'User'; public $validate = array( 'username' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A username is required' ) ), 'password' => array( 'required' => array( 'rule' => array('notEmpty'), 'message' => 'A password is required' ) ), 'role' => array( 'valid' => array( 'rule' => array('inList', array('admin', 'author')), 'message' => 'Please enter a valid role', 'allowEmpty' => false ) ) );

public function beforeSave() {if (isset($this->data[$this->alias]['password'])) {

$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);}return true;

}

}?>

Criar um site - BLOG

12-04-23Arlindo Santos 36

Page 37: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

<!-- File: /app/View/Posts/index.ctp (links para edição adicionados) -->

<?php $user = $this->Session->read('user');print_r($user);if(isset($user)){

$user = $this->Session->read('user');echo "Olá ".$user['username'] ;echo "<br>";echo $this->Html->link('Add Post', array('controller' => 'posts', 'action' => 'add')); echo " | ";echo $this->Html->link('Logout', array('controller' => 'users', 'action' => 'logout'));

}else{

echo "Olá anónimo";echo "<br>";echo $this->Html->link('Login', array('controller' => 'users', 'action' => 'login'));echo " | ";echo $this->Html->link('Register', array('controller' => 'users', 'action' => 'register'));

}

?>

<h1>Posts do Blog</h1><table> <tr> <th>Id</th> <th>Título</th> <th>Data de Criação</th> </tr>

<!-- Aqui é onde nós percorremos nossa matriz $posts, imprimindo as informações dos posts -->

<?php foreach ($posts as $line): print_r($line);?>

<tr> <td><?php echo $line['Post']['id']; ?></td> <td> <?php echo $this->Html->link($line['Post']['title'],array('controller' => 'posts', 'action' => 'view', $line['Post']['id'])); ?>( <?php if(isset($user)){

if($user["id"] == $line['Post']['user_id'] || strcmp($user["role"], "admin")==0){

echo $this->Html->link("editar",array('controller' => 'posts', 'action' => 'edit', $line['Post']['id'])); echo " | ";echo $this->Form->postLink( 'Delete',

array('action' => 'delete', $line['Post']['id']), array('confirm' => 'Are you sure?'));

}}?>

) </td> <td><?php echo $line['Post']['created']; ?></td> </tr> <?php endforeach; ?>

</table>

Criar um site - BLOG

12-04-23Arlindo Santos 37

Page 38: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

<!-- app/View/Users/register.ctp -->

<div class="users form">

<?php echo $this->Form->create('User');?>

<fieldset>

<legend><?php echo __('Register User'); ?></legend>

<?php

echo $this->Form->input('username');

echo $this->Form->input('password');

echo $this->Form->input('role', array(

'options' => array('admin' => 'Admin', 'author' => 'Author')

));

?>

</fieldset>

<?php echo $this->Form->end(__('Submit'));?>

</div>

Criar um site - BLOG

12-04-23Arlindo Santos 38

Page 39: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

<!-- app/View/Users/login.ctp -->

<div class="users form">

<?php echo $this->Session->flash('auth'); ?>

<?php echo $this->Form->create('User');?>

<fieldset>

<legend><?php echo __('Please enter your username and password'); ?></legend>

<?php

echo $this->Form->input('username');

echo $this->Form->input('password');

?>

</fieldset>

<?php echo $this->Form->end(__('Login'));?>

</div>

Criar um site - BLOG

12-04-23Arlindo Santos 39

Page 40: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Como alterar o layout?– http://book.cakephp.org/2.0/en/views.html

– Temos:• views – Já sabemos como funciona.• elements• layouts • helpers

Layouts

12-04-23Arlindo Santos 40

Page 41: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Altera o layout– /app/View/Layouts/default.ctp.– É possível ter vários layouts e atribuir os títulos dinamicamente.

<?phpclass UsersController extends AppController { public function view_active() { $this->set('title_for_layout', 'View Active Users'); $this->layout = 'default_small_ad'; }

public function view_image() { $this->layout = 'image'; //output user image }}

Layouts

12-04-23Arlindo Santos 41

Page 42: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Elements– /app/View/Elements– Incluir do views/posts/index.ctp

<?php echo $this->element('menu_top'); ?>

– E criar o Views/Elements/menu_top.ctp<?php $user = $this->Session->read('user');print_r($user);if(isset($user)){

$user = $this->Session->read('user');echo "Olá ".$user['username'] ;echo "<br>";echo $this->Html->link('Add Post', array('controller' => 'posts', 'action' => 'add')); echo " | ";echo $this->Html->link('Logout', array('controller' => 'users', 'action' => 'logout'));

}else{

echo "Olá anónimo";echo "<br>";echo $this->Html->link('Login', array('controller' => 'users', 'action' => 'login'));echo " | ";echo $this->Html->link('Register', array('controller' => 'users', 'action' => 'register'));

}?>

Layouts

12-04-23Arlindo Santos 42

Page 43: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Elements– Caching Elements

<?php echo $this->element(‘menu_top', array(), array('cache' => true)); ?>

– E podem ser passadas variáveis! Ex:<?phpecho $this->element(‘menu_top', array( "text" => “olá."));

Layouts

12-04-23Arlindo Santos 43

Page 44: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Extender views– Caching Elements

<!-- File: /app/View/Common/view.ctp --><h1>Title: <?php echo $this->fetch('title'); ?></h1><?php echo $this->fetch('content'); ?><div class="actions"> <h3>Related actions</h3> <ul> <?php echo $this->fetch('sidebar'); ?> </ul></div>

Layouts

12-04-23Arlindo Santos 44

Page 45: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Extender views– Caching Elements

<!-- File: /app/View/Posts/view.ctp --><?php$this->extend('/Common/view');

$this->assign('title', $post['Post']['title']);

$this->start('sidebar');?><li><?phpecho $this->Html->link('edit', array( 'action' => 'edit', $post['Post']['id'])); ?></li><?php $this->end(); ?>

<p><small>Created: <?php echo $post['Post']['created']?></small></p><p><?php echo $post['Post']['body']?></p>

Layouts

12-04-23Arlindo Santos 45

Page 46: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Substituir blocos …

– no view

<?php/$this->Html->script('carousel', array('inline' => false));$this->Html->css('carousel', null, array('inline' => false));?>

– no layout

<!DOCTYPE html><html lang="en"> <head> <title><?php echo $this->fetch('title'); ?></title> <?php echo $this->fetch('script'); ?> <?php echo $this->fetch('css'); ?> </head> // …

Layouts

12-04-23Arlindo Santos 46

Page 47: Cakephp - framework de desenvolvimento de aplicações Web em PHP

cakePHPSeminário2011/2012

• Exercícios:1. Não permitir o registo duplicado de utilizadores

2. Cada utilizador poderá consultar informação sobre os outros utilizadores

3. Alterar completamente o layout da página

Criar um site - BLOG

12-04-23Arlindo Santos 47