desenvolvimento web com cakephp
DESCRIPTION
TRANSCRIPT
Desenvolvimento Web com CakePHPSérgio VilarDesenvolvedor de Interfaces, Redesoft
Agenda
• Pré-requisitos para este minicurso
• Frameworks
• MVC
• CakePHP
• Mão na massa
Pré-requisitos para este minicurso
• Lógica de programação
• Php Básico
• Computador com Apache e MySQL
• Editor de texto de sua preferência
• Um suco, um toddynho, um café...
Frameworks
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
• Cache
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
• Cache
• Templates
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
• Cache
• Templates
• Validação
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
• Cache
• Templates
• Validação
• Login de usuários
O que é um framework?
• É uma estrutura de suporte desenvolvida para que outro projeto de software seja organizado e desenvolvido o tomando como base.
• Os Frameworks Php geralmente oferecem uma série de recursos como:
• Múltiplos bancos de dados
• Cache
• Templates
• Validação
• Login de usuários
• Geração de código
Porque usar um Framework?
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objetos e organizado
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objetos e organizado
• Consequentemente, manutenção mais fácil
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objetos e organizado
• Consequentemente, manutenção mais fácil
• Tarefas comuns embutidas (Conexão a vários DBS, validação, etc)
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objetos e organizado
• Consequentemente, manutenção mais fácil
• Tarefas comuns embutidas (Conexão a vários DBS, validação, etc)
• Comunidade ativa (Componentes e add-ons à vontade)
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objeto e organizado
• Consequentemente, manutenção mais fácil
• Tarefas comuns embutidas (Conexão a vários DBS, validação, etc)
• Comunidade ativa (Componentes e add-ons à vontade)
• Desenvolvimento simples e ágil (em sua maioria)
Porque usar um Framework?
• Estabelecimento de um padrão de desenvolvimento
• Código orientado a objeto e organizado
• Consequentemente, manutenção mais fácil
• Tarefas comuns embutidas (Conexão a vários DBS, validação, etc)
• Comunidade ativa (Componentes e add-ons à vontade)
• Desenvolvimento simples e ágil (em sua maioria)
• Evitar a POG (Programação Orientada a Gambiarra)
Principais Frameworks PHP
• Yii
• CodeIgniter
• CakePHP
• Zend
• Symfony
Fonte: phpframeworks.com
MVC
MVC
• Padrão de projetos
MVC
• Padrão de projetos
• Separa a aplicação em três partes:
MVC
• Padrão de projetos
• Separa a aplicação em três partes:
Model
Interação com o banco
MVC
• Padrão de projetos
• Separa a aplicação em três partes:
Model
View
Interação com o banco
Interface da aplicação
MVC
• Padrão de projetos
• Separa a aplicação em três partes:
Model
View Controler
Interação com o banco
Lógica da aplicaçãoInterface da aplicação
MVC
• Padrão de projetos
• Separa a aplicação em três partes:
Model
View Controler
Interação com o banco
Lógica da aplicaçãoInterface da aplicação
Como assim, Bial?
MVC
Browser Controler
O Browser envia uma requisição à aplicação
MVC
Browser Controler
O Controller processa a requisicão e consulta a lógica de negócio da aplicação
Model
MVC
Browser Controler
O Model acessa o Banco de Dados e recupera os dados requisitados pelo
Controller
Model
DB
MVC
Browser Controler
O Controller renderiza a View correspondente e apresenta os dados
recuperados
Model
DB
View
MVC, porque usar?
MVC, porque usar?
• Base funcional e organizacional da aplicação
MVC, porque usar?
• Base funcional e organizacional da aplicação
• Conjunto de ferramentas (validação, múltiplos DBs, etc)
MVC, porque usar?
• Base funcional e organizacional da aplicação
• Conjunto de ferramentas (validação, múltiplos DBs, etc)
• Aplicação escalável
MVC, porque usar?
• Base funcional e organizacional da aplicação
• Conjunto de ferramentas (validação, múltiplos DBs, etc)
• Aplicação escalável
• Desenvolvimento em paralelo
CakePHP
O que é o CakePHP?
O que é o CakePHP?
• O CakePHP é um Framework Php que visa o desenvolvimento ágil de aplicações usando os padrões MVC e ORM.
CakePHP: Vantagens
CakePHP: Vantagens
• Compatível com Php 4 e 5
CakePHP: Vantagens
• Compatível com Php 4 e 5
• Curva de aprendizado alta
CakePHP: Vantagens
• Compatível com Php 4 e 5
• Curva de aprendizado alta
• Possui CRUD (Create-Read-Update-Delete) integrado
CakePHP: Vantagens
• Compatível com Php 4 e 5
• Curva de aprendizado alta
• Possui CRUD (Create-Read-Update-Delete) integrado
• Compatível com vários Bancos de Dados (MySQL, Postgres, SQLite, SQL Server, Oracle, OBDC, Firebird)
CakePHP: Vantagens
• Compatível com Php 4 e 5
• Curva de aprendizado alta
• Possui CRUD (Create-Read-Update-Delete) integrado
• Compatível com vários Bancos de Dados (MySQL, Postgres, SQLite, SQL Server, Oracle, OBDC, Firebird)
• Componentes nativos para Email, Sessão, Criptografia, Autorização, ACL, etc
CakePHP: Vantagens
• Compatível com Php 4 e 5
• Curva de aprendizado alta
• Possui CRUD (Create-Read-Update-Delete) integrado
• Compatível com vários Bancos de Dados (MySQL, Postgres, SQLite, SQL Server, Oracle, OBDC, Firebird)
• Componentes nativos para Email, Sessão, Criptografia, Autorização, ACL, etc
• Internacionalização
CakePHP: Instalando
https://github.com/sergiovilar/minicurso-cakephp
CakePHP: Instalando
• CakePHP com login de usuários já desenvolvido, baseado no artigo:http://book.cakephp.org/2.0/pt/tutorials-and-examples/blog-auth-example/auth.html
• O CakePHP também pode ser baixado pelo site oficial:http://cakephp.org
CakePHP: Instalando
• Extraia o .zip e copie para a pasta C:\xampp\htdocs
• Renomeie a pasta para “minicurso-cakephp”
CakePHP: Instalando
• Acesse: http://localhost/phpMyAdmin e crie um banco de dados chamado cake_minicurso
• Abra o arquivo C:\xampp\htdocs\minicurso-cakephp\app\Config\database.php e configure o acesso ao banco de dados:
• Login: root
• Password: (vazia)
• Database: cake_minicurso
CakePHP: Instalando
• Certifique-se de que seu servidor Apache está ligado
• Teste acessando http://localhost/minicurso-cakephp
Mão na massa!
O que vamos fazer?
• Um blog simples onde usuários deslogados poderão acessar a home do blog e as internas dos posts
• Apenas usuários logados poderão cadastrar e editar posts
Configurando o banco
• Importe o arquivo minicurso.sql para o banco de dados na aplicação através do phpMyAdmin
Uma nota sobre Convenções
• O Cake possui Convenção sobre configuração, ou seja, uma série de regras são seguidas para que o desenvolvedor se preocupe apenas com o que realmente importa
Uma nota sobre Convenções
• O Cake possui Convenção sobre configuração, ou seja, uma série de regras são seguidas para que o desenvolvedor se preocupe apenas com o que realmente importa
• O Cake faz o uso de convenções para nomear as tabelas do banco, modelos, controllers e views. Veremos como isso funciona:
Uma nota sobre Convenções
• O Cake possui Convenção sobre configuração, ou seja, uma série de regras são seguidas para que o desenvolvedor se preocupe apenas com o que realmente importa
• O Cake faz o uso de convenções para nomear as tabelas do banco, modelos, controllers e views. Veremos como isso funciona:
• Tabela: posts (sempre no plural)
• Model: Post
• Controller: PostsController
• View: Posts
Criando o primeiro Model
app/Model/Post.php
<?php
class Post extends AppModel { public $name = 'Post';
}
?>
Criando o primeiro Controller
app/Controller/PostsController.php
<?phpclass PostsController extends AppController{!
! var $uses = 'Post';! var $scaffold;
}
?>
Criando o primeiro Controller
app/Controller/PostsController.php
<?phpclass PostsController extends AppController{!
! var $uses = 'Post';! var $scaffold;
}
?>
Model
Criando o primeiro Controller
app/Controller/PostsController.php
<?phpclass PostsController extends AppController{!
! var $uses = 'Post';! var $scaffold;
}
?>
O que é isso?
Scaffold
• O Scaffold é um recurso do CakePHP que cria o CRUD (Create-Read-Update-Delete) do nosso Controller
Scaffold
• O Scaffold é um recurso do CakePHP que cria o CRUD (Create-Read-Update-Delete) do nosso Controller
• Vantagens:
• É rápido e fácil
• Ótimo para prototipar aplicações
Scaffold
• O Scaffold é um recurso do CakePHP que cria o CRUD (Create-Read-Update-Delete) do nosso Controller
• Vantagens:
• É rápido e fácil
• Ótimo para prototipar aplicações
• Desvantagens:
• Não é flexível
• Baixa segurança
Vamos testar?
Acesse http://localhost/minicurso-cakephp/posts/add
ControllerAplicação Método
Vamos testar?
Acesse http://localhost/minicurso-cakephp/posts/add
Então, qualquer um pode cadastrar posts?
Por enquanto sim, vamos adicionar ao nosso PostsController o método que limita o acesso a apenas usuários logados:
Então, qualquer um pode cadastrar posts?
Por enquanto sim, vamos adicionar ao nosso PostsController o método que limita o acesso a apenas usuários logados:
public function beforeFilter() {
parent::beforeFilter();$this->Auth->allow('blog', 'v');
}
Então, qualquer um pode cadastrar posts?
Por enquanto sim, vamos adicionar ao nosso PostsController o método que limita o acesso a apenas usuários logados:
public function beforeFilter() {
parent::beforeFilter();$this->Auth->allow('blog', 'v');
}
“blog” e “v” serão os métodos acessíveis aos visitantes do nosso blog.
Criando o método “blog”
Adicione o método no PostsController:
public function blog(){ ! this->layout = 'blog';
$this->set('posts', $this->Post->find('all'));
}
Criando o método “blog”
Adicione o método no PostsController:
public function blog(){ ! this->layout = 'blog';
$this->set('posts', $this->Post->find('all'));
}
Usa o layout customizado que está em View/Layouts/blog.ctp
Criando o método “blog”
Adicione o método no PostsController:
public function blog(){ ! this->layout = 'blog';
$this->set('posts', $this->Post->find('all'));
}
Busca os posts e os coloca na variável $posts para que a view possa receber.
Criando a view “blog”
app/View/Posts/blog.ctp
<?php foreach($posts as $post): ?>
<h2> ! <?php echo $this->html->link( ! ! ! $post['Post']['titulo'], ! ! ! '/posts/v/'.$post['Post']['id']); ! ?> </h2> <p>Postado em <?php echo $post['Post']['data']; ?></p> <div><?php echo $post['Post']['conteudo']; ?></div>
<?php endforeach; ?>
Criando a view “blog”
app/View/Posts/blog.ctp
<?php foreach($posts as $post): ?>
<h2> ! <?php echo $this->html->link( ! ! ! $post['Post']['titulo'], ! ! ! '/posts/v/'.$post['Post']['id']); ! ?> </h2> <p>Postado em <?php echo $post['Post']['data']; ?></p> <div><?php echo $post['Post']['conteudo']; ?></div>
<?php endforeach; ?>
Percorre a array de posts
Criando a view “blog”
app/View/Posts/blog.ctp
<?php foreach($posts as $post): ?>
<h2> ! <?php echo $this->html->link( ! ! ! $post['Post']['titulo'], ! ! ! '/posts/v/'.$post['Post']['id']); ! ?> </h2> <p>Postado em <?php echo $post['Post']['data']; ?></p> <div><?php echo $post['Post']['conteudo']; ?></div>
<?php endforeach; ?>
Cria um link para a página interna do post
Criando a view “blog”
app/View/Posts/blog.ctp
<?php foreach($posts as $post): ?>
<h2> ! <?php echo $this->html->link( ! ! ! $post['Post']['titulo'], ! ! ! '/posts/v/'.$post['Post']['id']); ! ?> </h2> <p>Postado em <?php echo $post['Post']['data']; ?></p> <div><?php echo $post['Post']['conteudo']; ?></div>
<?php endforeach; ?>
Acesse:http://localhost/minicurso-cakephp/posts/blog
Criando o método “v”
Adicione o método no PostsController:
public function v($id = null){
$this->layout = 'blog';
$this->Post->id = $id; $this->set('post', $this->Post->read());
}
Criando o método “v”
Adicione o método no PostsController:
public function v($id = null){
$this->layout = 'blog';
$this->Post->id = $id; $this->set('post', $this->Post->read());
}
Recebe a ID do post requisitado
Criando o método “v”
Adicione o método no PostsController:
public function v($id = null){
$this->layout = 'blog';
$this->Post->id = $id; $this->set('post', $this->Post->read());
}
Busca no model e coloca dentro da variável $post
Criando a view “v”
app/View/Posts/v.ctp
<h2><?php echo $post['Post']['titulo']; ?></h2> <p>Postado em <?php echo $post['Post']['data']; ?></p> <div><?php echo $post['Post']['conteudo']; ?></div>
Acesse:http://localhost/minicurso-cakephp/posts/blog
Pronto!
Nosso blog está pronto, acesse http://localhost/minicurso-cakephp/posts/blog e teste novamente.
Pronto!
Nosso blog está pronto, acesse http://localhost/minicurso-cakephp/posts/blog e teste novamente.
Os arquivos com todo o código fonte deste minicurso podem ser baixados em:https://github.com/sergiovilar/minicurso-cakephp/archive/desenvolvimento.zip
Exercício
Tomando como base o exemplo do blog, crie um Model, um Controller com CRUD e listagem tomando como base a tabela events.
É isso aí, até a pró[email protected]://about.me/vilarhttp://slideshare.net/sergiovilarhttp://github.com/sergiovilar