10
PROFESSORA VERONICE DE FREITAS Graduação: Tecnologia em Processamento de Dados (UNOPAR) Especialização: Análise e Desenvolvimento de Sistemas (UNIFIL) Mestrado: Ciência da Computação (UFRGS) SEMINÁRIOS VI Aula 2 Framework CAKEPHP Objetivo: apresentar conceitos de utilização de framework para o desenvolvimento de aplicações web. Introdução Introdução; Arquitetura – MVC; Programação – CakePHP; Requisitos – CakePHP; Instalação / Configuração; CakePHP Arquitetura MVC; Exemplos. Estrutura Um framework captura a funcionalidade comum a várias aplicações. O que é um framework

000056494200089598

Embed Size (px)

Citation preview

Page 1: 000056494200089598

PROFESSORA VERONICE DE FREITAS

Graduação: Tecnologia em Processamento de Dados (UNOPAR)

Especialização: Análise e Desenvolvimento de Sistemas (UNIFIL)

Mestrado: Ciência da Computação(UFRGS)

SEMINÁRIOS VI

Aula 2

Framework CAKEPHP

Objetivo: apresentar conceitos de utilização de framework para o desenvolvimento de aplicações web. 

Introdução

Introdução; 

Arquitetura – MVC;

Programação – CakePHP;

Requisitos – CakePHP;

Instalação / Configuração;

CakePHP ‐ Arquitetura MVC;

Exemplos.

Estrutura

Um framework captura a funcionalidade comum a várias aplicações.

O que é um framework

Page 2: 000056494200089598

Um framework provê uma solução para uma família de problemas semelhantes;

Um framework ou arcabouço é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica;

Framework é uma infra‐estrutura (esqueleto) de uma família de aplicações projetado para ser reutilizado.

Definição ‐ Framework

Os frameworks são baseados em uma série de padrões de desenvolvimento já consolidado:

MVC é um acrônimo para Model, View, Controller (Modelo, Visão e Controlador). A idéia é separar todo o desenvolvimento de uma aplicação nestas três partes, ou camadas: Model, Controller, View. 

Frameworks

Camada de Modelo: é onde se processa e responde as requisições do usuário e pode invocar alterações no Model (parte da programação destinada ao tratamento dos dados);

Controle(Controller): É onde se processa e responde as requisições do usuário e pode invocar alterações no Model (responsável pelas regras de negócio).

A Arquitetura MVC

Visão (View): É a apresentação dos dados para o usuário, normalmente uma página HTML mas pode gerar outros tipos de documentos como PDF, XLS, etc.

A Arquitetura MVC

Fluxo de execução ‐MVC

Fonte: http://net.tutsplus.com/tutorials/other/mvc‐for‐noobs/

Page 3: 000056494200089598

CakePHP é uma framework que permite o desenvolvimento rápido de aplicações para web em PHP;

O Cake‐PHP é baseado no framework Ruby on Rails e utiliza padrões de projeto conhecidos, tais como ActiveRecord, MVC (Model‐View‐Controller), etc.

O que é CakePHP? 

Programação ‐ CakePHP

Requer um conhecimento sobre Orientação a Objeto

<?phpclass Mysql{var $Servidor = “localhost”;var $Usuario = “root”;var $Senha = “”;var Banco = “aula”;

function AbraConexao(){mysql_conect($this‐> Servidor, $this‐> Senha)

or die (mysql_error));mysql_select_dv($this‐> Banco);

}}

$MySql = new Mysql;$Mysql ‐> AbreConexao();?>

PHP Programação 

Orientada a Objetos 

Geralmente é colocado em outro arquivo.

O framework CakePHP funciona em qualquer servidor web que seja capaz de executar scripts em linguagem PHP 4 ou superior;

Servidor web: Apache 2.0, LightHTTP, IIS. Sendo recomendado a utilização do apache com o módulo mod_rewrite;

Banco de Dados suportados pelo CakePHP: MySQL (4 ou superior), PostgreSQL, Firebird, MS SQL SERVER, Oracle, SQLite, ODBC, ADOdb.

Requisitos ‐ CakePHP

O arquivo de configuração do Apache é o httpd.conf (No windows o arquivo será encontrado dentro do diretório "conf", geralmente localizado no diretório de instalação do Apache);

Para habilitar o módulo rewrite no servidor apache basta descomentar* a seguinte linha:

Configurando o Apache

#LoadModule rewrite_module modules/mod_rewrite.so

Page 4: 000056494200089598

O primeiro passo para a instalação do framework éfazer o seu download no endereço (sugiro a versão 1.3.13):

http://cakephp.org

Após o download dos fontes, é necessário descompactar o arquivo no DocumentRoot do apache.

Pasta da DocumentRoot: C:\...\htdocs\

Instalando o CakePHP localhost

http://localhost/cake

Para iniciar o desenvolvimento de uma aplicação, énecessário apenas configurar o banco de dados por meio do arquivo:

diretório_do_cake/app/conf/database.phpénecessário renomear o arquivo database defalt para database.php.

O banco de dados é configurado pelo array: $default, que é ilustrado a seguir.

O arquivo de configuração database.php

Configuração database.php

class DATABASE_CONFIG {var $default = array(

'driver' => 'mysql','persistent' => false,'host' => 'localhost','port' => '','login' => 'root','password' => 'vero1234','database' => 'mydb','schema' => '',

'prefix' => '','encoding' => ''

);}

O arquivo de configuração core.php

Variável Descrição

debug Configura o nível de mensagens de debug que será mostrado na tela.

0 = Modo sem nenhuma mensagem, para uso do sistema em produção.

1 = Mostra mensagens de erros e advertências.2 = Mostra mensagens de erros, advertências e 

comandos SQL.3 = Mostra mensagens de erros, advertências, 

comandos SQL e  variáveis do controle.

... ...

PERGUNTAS

Page 5: 000056494200089598

CakePHP como a maioria dos Frameworks web utiliza a arquitetura MVC que divide a aplicação em três camadas Modelo(Model), Visão(View) e Controle(Controller) para torná‐la de mais fácil manutenção permitindo que alterações em uma das camadas causem pouca influencia nas outras.

CAKE / Arquitetura MVC

O exemplo a seguir apresenta uma requisição feita ao CakePHP:

Requisição típica do CakePHP 

O cliente(1) faz uma requisição ao Dispatcher(componente responsável por encaminhar requisições) que identifica qual Controller deve ser chamado e repassa a requisição para ele(2).

O controle verifica qual ação deve tomar(regras de negócio), e se necessário utliza o Model salvando ou lendo dados(3,4) e após passa o controle para o View(5).

O View então trata de formatar a resposta e a envia para o cliente(6).

O framework provê também uma estrutura básica de organização, desde nomes de arquivos aténomes de tabelas de bancos de dados, mantendo toda sua aplicação consistente e lógica.  Lista de convenções disponível em: 

• http://book.cakephp.org/pt/view/330/Criando‐o‐banco‐de‐dados‐do‐Blog#!/pt/view/22/Convenções‐no‐CakePHP

Estrutura básica de organização

EXEMPLOS

Exemplo 1 ‐ Hello World

Para executar 

Run http://localhost/cake/hellos

Alternativamente 

http://localhost/cake/hellos/index

Page 6: 000056494200089598

Modelo do exemplo 01 apesar de muito simples, este modelo já exibe alguns aspectos típicos dos modelos: representa dados ‐ neste caso apenas a string "Hello world!" ‐ e devolve esses dados para um controlador. 

Model (MODELO)

... /cake/app/models/hello.php

Model (MODELO)

<?phpclass Hello extends AppModel { var $name     = 'Hello';var $useTable = false;          // No database

function data() { return 'Hello world!'; }}?>

Controlador. As funções principais definidas num controlador chamam‐se ações. Este controlador define apenas a ação index. Esta ação exibe um comportamento típico: é ativada para responder a um pedido feito ao servidor; depois pede dados ao modelo e envia‐os para o visualizador apropriado.

Controlador

<?phpclass HellosController extends AppController {var $name = "Hellos";var $uses = Array('Hello');  // The model

function index() {$data = $this‐>Hello‐>data();$this‐>set('data', $data);}}?>

…/cake/app/controllers/hellos_controller.php

Controlador

Visualizador. Este visualizador apresenta dados, neste caso os dados que foram colocados na variável $data pelo controlador.  

…/cake/app/views/hellos/index.ctp

Index.ctp

<hr size=1/><h1><?php echo $data ?></h1><hr size=1/>

PERGUNTAS

Page 7: 000056494200089598

Aplicação com funções:

Listagem geral com opções de ADICIONAR, ALTERAR, EXCLUIR

Exemplo 02 Exemplo – aplicação ‐ CAKEPHP

http://book.cakephp.org/pt/view/330/Creating‐the‐Blog‐Database

Nome do banco de dados

Criando obanco

de dados

Execute o script abaixo na guia SQL

MYSQL (ADMIN)‐ Criar tabela 

CREATE TABLE posts (id INT UNSIGNED AUTO_INCREMENT

PRIMARY KEY,title VARCHAR(50),body TEXT,created DATETIME DEFAULT NULL,modified DATETIME DEFAULT NULL);

Execute o script abaixo na guia SQL:

MYSQL (ADMIN)‐ Registros

/* Em seguida, inserir alguns registros de exemplo: */

INSERT 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())

Configuração ‐ banco de dados

class DATABASE_CONFIG {var $default = array(

'driver' => 'mysql','persistent' => false,'host' => 'localhost','port' => '','login' => 'root','password' => '','database' => 'blog','schema' => '','prefix' => '','encoding' => ''

);}

Configurações do arquivo database.phpPasta: cake\app\config\database.php

Page 8: 000056494200089598

Os arquivos da classe de model do CakePHP ficamem /app/models e o arquivo que iremos criar serásalvo como /app/models/post.php;

A nomenclatura da classe segue uma convenção e é muito importante no CakePHP. Ao chamar nosso model de Post, o CakePHP pode automaticamente deduzier que este model será usado num PostsController, e que manipulará os dados de uma tabela do banco chamada de posts.

Crie um model Post

Crie um model Post<?phpclass Post extends AppModel{var $name = 'Post';

var $validate = array('title' => array('rule' => 'notEmpty'),'body' => array('rule' => 'notEmpty')

);}?>

o arquivo que iremos criar será salvo como /app/models/post.php. 

O controller é onde toda a lógica de negócio para interações vai acontecer. De uma forma geral, é o local onde você vai manipular os models e lidar com o resultado das ações feitas sobre nosso post. 

Crie um Posts Controller

<?phpclass PostsController extends AppController {var $name = 'Posts';}?>

Arquivo chamado: posts_controller.php dentro do diretório /app/controllers

posts_controller.php

<?phpclass PostsController extends AppController {

var $name = 'Posts';

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

}?>

Local onde serão inseridos os outros métodos

/app/views/posts/view.ctp

View

<!‐‐ Arquivo: /app/views/posts/view.ctp ‐‐><h1><?php echo $post['Post']['title']?></h1>

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

<p><?php echo $post['Post']['body']?></p>

Arquivo: /app/views/posts/add.ctp

add.ctp

<!‐‐ Arquivo: /app/views/posts/add.ctp ‐‐> 

<h1>Adicionar Post</h1><?phpecho $form‐>create('Post');echo $form‐>input('title');echo $form‐>input('body', array('rows' => '3'));echo $form‐>end('Salvar Post');?>

Page 9: 000056494200089598

Arquivo: /app/views/posts/edit.ctp

edit.ctp

<h1>Editar Post</h1><?phpecho $form‐>create('Post', array('action' => 'edit'));echo $form‐>input('title');echo $form‐>input('body', array('rows' => '3'));echo $form‐>input('id', array('type'=>'hidden')); echo $form‐>end('Salvar o Post');?>

posts_controller.php

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

function add() {if (!empty($this‐>data)) {if ($this‐>Post‐>save($this‐>data)) {$this‐>Session‐>setFlash('Seu post foi salvo.');$this‐>redirect(array('action' => 'index'));}

}}

Funções  inserir no ponto indicado no slide de introdução: posts_controller.php

posts_controller.php

function delete($id = null) {

$this‐>Post‐>delete($id);$this‐>Session‐>setFlash('O post com id: ' . $id 

. ' foi excluído.' );$this‐>redirect(array('action'=>'index'));

}

posts_controller.php

function edit($id = null) {$this‐>Post‐>id = $id;

if (empty($this‐>data)) {$this‐>data = $this‐>Post‐>read();} else {

if ($this‐>Post‐>save($this‐>data)) {$this‐>Session‐>setFlash('Seu post foi 

atualizado.');$this‐>redirect(array('action'=>'index'));}

}}

<h1>Posts do Blog</h1><?php echo $html‐>link('Adicionar Post',array('controller' => 'posts', 'action' => 'add'))?><table><tr><th>Id</th><th>Título</th><th>Criado em</th></tr><!‐‐ Aqui varremos nosso array $posts, exibindo informações do post ‐‐><?php foreach ($posts as $post): ?><tr><td><?php echo $post['Post']['id']; ?></td><td><?php echo $html‐>link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?></td><td>

<!‐‐ Arquivo: /app/views/posts/index.ctp ‐‐>

<?php echo $html‐>link('Delete',"/posts/delete/{$post['Post']['id']}", null,'Are you sure?')?>

<?php echo $html‐>link('Edit', '/posts/edit/'.$post['Post']['id']);?></td>

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

</table>

CONTINUAÇÃO:<!‐‐ Arquivo: /app/views/posts/index.ctp ‐‐>

Page 10: 000056494200089598

Material de apoio

CAKEPHP

• http://book.cakephp.org/pt

• http://cakephp.org/

• http://www.wesleyk.com/blog/wp‐content/uploads/2009/08/apostila‐cakephp.pdf

• http://www.phpmg.com/wp‐content/uploads/2009/10/DanielGolgher‐ApostilaCakePHP.pdf

© 2011 – Todos os direitos reservados.Uso exclusivo no Sistema de Ensino Presencial Conectado.