000056494200089598
Transcript of 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
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/
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
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
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
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
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
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');?>
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 ‐‐>
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.