SlideShare uma empresa Scribd logo
4
Mais lidos
9
Mais lidos
10
Mais lidos
Programação para WEB
Regis Pires Magalhães
regispiresmag@gmail.com
Implementando a
Arquitetura MVC em
PHP
MVC – Modelo, Visão, Controlador
 Model-view-controller (MVC) é um padrão de
arquitetura de software.
 Para que serve?
 Separar papéis para: reduzir a complexidade e
facilitar a manutenção, especialmente quando a
aplicação fica grande. Também facilita a divisão de
tarefas em uma equipe de trabalho.
 Tornar aplicações mais flexíveis e extensíveis.
 Permite inclusive a substituição da tecnologia de
uma camada sem afetar as demais.
MVC – Modelo, Visão, Controlador
 Como surgiu?
 Foi criado como padrão de projeto arquitetural
usado em interfaces de usuário na linguagem
Smalltalk.
Arquitetura MVC
Model
(Dados)
View
(apresentação
dos dados)
Controller
envia entrada de dados
exibe o modelo
Consulta ou
altera o modelo
define que visão será exibida
MVC – Modelo, Visão, Controlador
 Modelo
 Refere-se aos dados da aplicação.
 Pode usar mecanismos de armazenamento persistente
(bancos de dados) ou não.
 Visão
 Determina como o modelo vai ser mostrado ao usuário.
 Controlador
 Recebe interações do usuário e a partir delas, manipula o
modelo e determina a visão a ser usada.
 Pode alterar o modelo ou apenas consultá-lo para
posterior apresentação deste modelo a partir de uma
determinada visão.
 Em outras palavras, faz o “meio-de-campo” entre o modelo
e a visão.
Arquitetura MVC – Resumo
 Modelos – Dados;
 Visões – Como os dados são apresentados;
 Controladores – Recebe entrada de dados
do usuário. Manipula o modelo e determina a
visão para exibição do modelo.
Arquitetura MVC
Exemplo 1 – MVC Super Simples
 MVC bem simples para entendermos a
divisão.
 Modelo – pessoa.php
 Visão – pessoa_visao.php
 Controlador – pessoa_controlador.php
Modelo - pessoa_modelo.php
<?php
class Pessoa {
private $nome, $fone;
function __construct($nome, $fone) {
$this->nome = $nome;
$this->fone = $fone;
}
function getNome() {
return $this->nome;
}
function getFone() {
return $this->fone;
}
}
?>
Controlador - pessoa_controlador.php
<?php
require_once('pessoa_modelo.php');
class PessoaControlador {
function mostra() {
$pessoa = new Pessoa('Maria','(86)3323-1234');
require_once('pessoa_visao.php');
}
}
$pc = new PessoaControlador();
$pc->mostra();
?>
Visão - pessoa_visao.php
<html>
<head>
<meta http-equiv="Content-type"
content="text/html; charset=utf-8" />
<title>Pessoa</title>
</head>
<body>
<h1>Pessoa - Visão</h1>
<p>Nome: <?= $pessoa->getNome() ?></p>
<p>Fone: <?= $pessoa->getFone() ?></p>
</body>
</html>
Exemplo 2 – MVC com Dispatcher
 Usando um front-controller ou dispatcher
 Há um controlador principal (index.php) que
despacha as requisições para controladores e
ações específicos.
 Controladores e ações específicos são definidos
pelos parâmetros da URL do dispatcher:
 http://localhost/mvc/index.php/pessoa/mostra
 No nosso exemplo, o dispatcher:
 Instancia o controlador especificado
 Executa o método (ação) especificado do controlador
instanciado.
Testando a URL - testa_url.php
<?php
$parametros = explode('/',$_SERVER['REQUEST_URI']);
$controlador = $parametros[3];
$acao = $parametros[4];
$parametros = array_slice($parametros, 5);
?>
<html>
<head>
<meta http-equiv="Content-type"
content="text/html; charset=utf-8" />
<title>Testa URL</title>
</head>
<body>
<h1>Testa URL</h1>
<p>REQUEST_URI: <?= $_SERVER['REQUEST_URI'] ?></p>
<p>Controlador: <?= $controlador ?></p>
<p>Ação: <?= $acao ?></p>
<p>Demais parâmetros: <?php print_r($parametros); ?></p>
</body>
</html>
Dispatcher - index.php
<?php
$uri = str_replace('index.php/','',$_SERVER['REQUEST_URI']);
$parametros = explode('/',$uri);
$controlador = $parametros[2];
$acao = $parametros[3];
$parametros = array_slice($parametros, 4);
$arq_controlador = $controlador . '_controlador';
$classe_controlador = str_replace('_', ' ', $arq_controlador);
$classe_controlador = ucwords($classe_controlador);
$classe_controlador = str_replace(' ', '', $classe_controlador);
require_once($arq_controlador . '.php');
$obj = new $classe_controlador;
$obj->$acao($parametros);
?>
Controlador - pessoa_controlador.php
<?php
require_once('pessoa.php');
class PessoaControlador {
function mostra() {
$pessoa = new Pessoa('Maria','(86)3323-1234');
require_once('pessoa_visao.php');
}
}
?>
Problemas
 Podemos enviar requisições que não passam
pelo dispatcher.
 Seria mais interessante o dispatcher centralizar o
tratamento de todas as requisições.
 Enviar repetidamente 'index.php' para acessar
o dispatcher deixa a URL longa e ainda
diminui sua legibilidade.
 Seria melhor padronizarmos uma URL mais
resumida para definirmos o nome do controlador
e da ação.
Solução
 Uma solução bastante interessante para os
problemas abordados é a reescrita de URL.
 Com esse recurso podemos fazer a seguinte
convenção:
 Para a URL: http://localhost/mvc/pessoa/mostra
 Podemos dizer que:
 mvc é um diretório da nossa aplicação
 pessoa é o nosso controlador
 mostra é a nossa ação que será executada no
controlador.
Reescrita de URL
 Para usarmos reescrita de URL, precisamos habilitar
o módulo de reescrita do Apache:

No arquivo: C:xamppliteapacheconfhttpd.conf
descomente a seguinte linha:

LoadModule rewrite_module modules/mod_rewrite.so
 Depois disso, criamos nossas regras de reescrita no
arquivo .htaccess no diretório raiz da aplicação:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Reescrita de URL
 No Ubuntu ainda é preciso alterar o AllowOverride
para All no arquivo /etc/apache2/sites-
available/default:
 No XAMPP isso já vem habilitado.
...
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
...
Flags de reescrita
 L – Last Rule
 Pára o processo de reescrita e não aplica
regras adicionais.
 Semelhante a um break do C, Java ou PHP.

Mais conteúdo relacionado

ODP
Php 06 Crud Mvc
PPTX
ASP.NET MVC 4 - Introdução - Parte I
PPTX
ASP.NET MVC 4 - Part III - Views (Continuação: Part II)
PPTX
Middlewares com asp.net core
PPTX
Introdução ASP.NET Core
PPTX
Frameworks em Java
PPTX
ASP.NET MVC
PPT
Front Controller & Presentation-Abstract-contrll
Php 06 Crud Mvc
ASP.NET MVC 4 - Introdução - Parte I
ASP.NET MVC 4 - Part III - Views (Continuação: Part II)
Middlewares com asp.net core
Introdução ASP.NET Core
Frameworks em Java
ASP.NET MVC
Front Controller & Presentation-Abstract-contrll

Mais procurados (20)

ODP
Arquitetura MVC, JavaBeans e DAO
PPTX
Comtec2010 asp.net mvc
PPT
PPT
Mvc - Semifinal
PPTX
DOCX
Camadas
PPTX
Middlewares
PDF
Knockout JS - Uma framework para aplicações web
PPTX
KnockoutJS com ASP.NET MVC3: Utilização na vida real
PDF
Arquitetura MVC
PPTX
Gradle spring-hateoas-Lombok
PPTX
Desenvolvimento web com .NET Core - Meetup São Carlos
PPS
Lampada Php Conference Brasil 2007 Palestra
PPT
Middleware Reflexivo
PDF
Padrões Arquiteturais - MVC, MVP e MVVM
PPTX
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
PDF
Fundamentos de arquitetura Web
PDF
Framework web 02 - 2016
PPTX
Sistemas Distribuidos, Middleware e RPC
PDF
Spring Security e Spring Boot Aula - 2018
Arquitetura MVC, JavaBeans e DAO
Comtec2010 asp.net mvc
Mvc - Semifinal
Camadas
Middlewares
Knockout JS - Uma framework para aplicações web
KnockoutJS com ASP.NET MVC3: Utilização na vida real
Arquitetura MVC
Gradle spring-hateoas-Lombok
Desenvolvimento web com .NET Core - Meetup São Carlos
Lampada Php Conference Brasil 2007 Palestra
Middleware Reflexivo
Padrões Arquiteturais - MVC, MVP e MVVM
Programação modular - Ferramenta para rotular seções de imagens e realizar bu...
Fundamentos de arquitetura Web
Framework web 02 - 2016
Sistemas Distribuidos, Middleware e RPC
Spring Security e Spring Boot Aula - 2018
Anúncio

Destaque (20)

ODP
Php 08 Oo
PDF
Lean Startup
ODP
Prog web 09-php-crud-mvc
ODP
Prog web 07-pdo
ODP
Java 14 Javadoc
ODP
Prog web 02-php-primeiros-passos
PDF
Easy Rails
PDF
Web Scale Data Management
ODP
Pascal Tipos
ODP
Prog web 01-php-introducao
ODP
Java 15 Jar
ODP
Prog web 06-php-oo
ODP
Java 01 Java Visao Geral Detalhado
ODP
Prog web 00-modelo-cliente_servidor_web
PDF
Coding Dojo
PPT
Prog web 03-php-sessoes-cookies_cabecalhos
PDF
Linked Data - Minicurso - SBBD 2011
PDF
Linked Data Tutorial - Conferencia W3C Brasil 2011
ODP
Curso Ruby
PPTX
Responsive web design
Php 08 Oo
Lean Startup
Prog web 09-php-crud-mvc
Prog web 07-pdo
Java 14 Javadoc
Prog web 02-php-primeiros-passos
Easy Rails
Web Scale Data Management
Pascal Tipos
Prog web 01-php-introducao
Java 15 Jar
Prog web 06-php-oo
Java 01 Java Visao Geral Detalhado
Prog web 00-modelo-cliente_servidor_web
Coding Dojo
Prog web 03-php-sessoes-cookies_cabecalhos
Linked Data - Minicurso - SBBD 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
Curso Ruby
Responsive web design
Anúncio

Semelhante a Prog web 08-php-mvc (20)

ODP
Php 05 Mvc
PDF
Conceitos e Frameworks para Arquitetura MVC.pdf
PPTX
Slide 01 introdução ao php e ao code igniter
PPTX
Arquitetura e Frameworks para Arquitetura MVC.pptx
ODP
Usando MVC para agilizar o desenvolvimento
PPTX
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
PPTX
Apresentação mvc
PPTX
Palestra Flisol 2012 - Campinas
PPTX
MVC e Frameworks MVC
PPTX
Programando php com excelência
PPT
Programação Web com Zend Framework e Ajax com Dojo
PPT
Apresentação Java Web Si Ufc Quixadá - MVC
PDF
Entendendo a Arquitetura MVC do Zend Framework
PDF
Serversidephp pptx2-120418140114-phpapp01
PPTX
Apresentação faef
PPT
MVC & Zend Framework
PDF
Desenvolvimento Web com CakePHP
PPT
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
PPT
Apresentação faef
PPTX
Arquitetura MVC.pptx
Php 05 Mvc
Conceitos e Frameworks para Arquitetura MVC.pdf
Slide 01 introdução ao php e ao code igniter
Arquitetura e Frameworks para Arquitetura MVC.pptx
Usando MVC para agilizar o desenvolvimento
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
Apresentação mvc
Palestra Flisol 2012 - Campinas
MVC e Frameworks MVC
Programando php com excelência
Programação Web com Zend Framework e Ajax com Dojo
Apresentação Java Web Si Ufc Quixadá - MVC
Entendendo a Arquitetura MVC do Zend Framework
Serversidephp pptx2-120418140114-phpapp01
Apresentação faef
MVC & Zend Framework
Desenvolvimento Web com CakePHP
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Apresentação faef
Arquitetura MVC.pptx

Mais de Regis Magalhães (15)

PDF
High Dimensional Data
PPTX
PHP 10 CodeIgniter
ODP
Prog web 05-php-mysql
ODP
Prog web 04-php-gd
ODP
Prog web 03-php-sessoes-cookies_cabecalhos
PPT
Prog web 02-php-primeiros-passos
ODP
Prog web 02-php-primeiros-passos
ODP
Prog web 00-modelo-cliente_servidor_web
ODP
Prog web 01-php-introducao
ODP
Java 01 Java Visao Geral Resumo
PDF
Merci 10 Completo
ODP
php 01 introducao
ODP
java 00 Introducao
DOC
POO Plano de Curso
ODP
Php 04 Mysql
High Dimensional Data
PHP 10 CodeIgniter
Prog web 05-php-mysql
Prog web 04-php-gd
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Prog web 00-modelo-cliente_servidor_web
Prog web 01-php-introducao
Java 01 Java Visao Geral Resumo
Merci 10 Completo
php 01 introducao
java 00 Introducao
POO Plano de Curso
Php 04 Mysql

Último (20)

PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Aula sobre banco de dados com firebase db
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula sobre desenvolvimento de aplicativos
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Aula 18 - Manipulacao De Arquivos python
Apple Pippin Uma breve introdução. - David Glotz
Aula sobre banco de dados com firebase db
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Curso de Java 9 - (Threads) Multitarefas.pptx
Processos na gestão de transportes, TM100 Col18
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula sobre desenvolvimento de aplicativos
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx

Prog web 08-php-mvc

  • 1. Programação para WEB Regis Pires Magalhães regispiresmag@gmail.com Implementando a Arquitetura MVC em PHP
  • 2. MVC – Modelo, Visão, Controlador  Model-view-controller (MVC) é um padrão de arquitetura de software.  Para que serve?  Separar papéis para: reduzir a complexidade e facilitar a manutenção, especialmente quando a aplicação fica grande. Também facilita a divisão de tarefas em uma equipe de trabalho.  Tornar aplicações mais flexíveis e extensíveis.  Permite inclusive a substituição da tecnologia de uma camada sem afetar as demais.
  • 3. MVC – Modelo, Visão, Controlador  Como surgiu?  Foi criado como padrão de projeto arquitetural usado em interfaces de usuário na linguagem Smalltalk.
  • 4. Arquitetura MVC Model (Dados) View (apresentação dos dados) Controller envia entrada de dados exibe o modelo Consulta ou altera o modelo define que visão será exibida
  • 5. MVC – Modelo, Visão, Controlador  Modelo  Refere-se aos dados da aplicação.  Pode usar mecanismos de armazenamento persistente (bancos de dados) ou não.  Visão  Determina como o modelo vai ser mostrado ao usuário.  Controlador  Recebe interações do usuário e a partir delas, manipula o modelo e determina a visão a ser usada.  Pode alterar o modelo ou apenas consultá-lo para posterior apresentação deste modelo a partir de uma determinada visão.  Em outras palavras, faz o “meio-de-campo” entre o modelo e a visão.
  • 6. Arquitetura MVC – Resumo  Modelos – Dados;  Visões – Como os dados são apresentados;  Controladores – Recebe entrada de dados do usuário. Manipula o modelo e determina a visão para exibição do modelo.
  • 8. Exemplo 1 – MVC Super Simples  MVC bem simples para entendermos a divisão.  Modelo – pessoa.php  Visão – pessoa_visao.php  Controlador – pessoa_controlador.php
  • 9. Modelo - pessoa_modelo.php <?php class Pessoa { private $nome, $fone; function __construct($nome, $fone) { $this->nome = $nome; $this->fone = $fone; } function getNome() { return $this->nome; } function getFone() { return $this->fone; } } ?>
  • 10. Controlador - pessoa_controlador.php <?php require_once('pessoa_modelo.php'); class PessoaControlador { function mostra() { $pessoa = new Pessoa('Maria','(86)3323-1234'); require_once('pessoa_visao.php'); } } $pc = new PessoaControlador(); $pc->mostra(); ?>
  • 11. Visão - pessoa_visao.php <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Pessoa</title> </head> <body> <h1>Pessoa - Visão</h1> <p>Nome: <?= $pessoa->getNome() ?></p> <p>Fone: <?= $pessoa->getFone() ?></p> </body> </html>
  • 12. Exemplo 2 – MVC com Dispatcher  Usando um front-controller ou dispatcher  Há um controlador principal (index.php) que despacha as requisições para controladores e ações específicos.  Controladores e ações específicos são definidos pelos parâmetros da URL do dispatcher:  http://localhost/mvc/index.php/pessoa/mostra  No nosso exemplo, o dispatcher:  Instancia o controlador especificado  Executa o método (ação) especificado do controlador instanciado.
  • 13. Testando a URL - testa_url.php <?php $parametros = explode('/',$_SERVER['REQUEST_URI']); $controlador = $parametros[3]; $acao = $parametros[4]; $parametros = array_slice($parametros, 5); ?> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Testa URL</title> </head> <body> <h1>Testa URL</h1> <p>REQUEST_URI: <?= $_SERVER['REQUEST_URI'] ?></p> <p>Controlador: <?= $controlador ?></p> <p>Ação: <?= $acao ?></p> <p>Demais parâmetros: <?php print_r($parametros); ?></p> </body> </html>
  • 14. Dispatcher - index.php <?php $uri = str_replace('index.php/','',$_SERVER['REQUEST_URI']); $parametros = explode('/',$uri); $controlador = $parametros[2]; $acao = $parametros[3]; $parametros = array_slice($parametros, 4); $arq_controlador = $controlador . '_controlador'; $classe_controlador = str_replace('_', ' ', $arq_controlador); $classe_controlador = ucwords($classe_controlador); $classe_controlador = str_replace(' ', '', $classe_controlador); require_once($arq_controlador . '.php'); $obj = new $classe_controlador; $obj->$acao($parametros); ?>
  • 15. Controlador - pessoa_controlador.php <?php require_once('pessoa.php'); class PessoaControlador { function mostra() { $pessoa = new Pessoa('Maria','(86)3323-1234'); require_once('pessoa_visao.php'); } } ?>
  • 16. Problemas  Podemos enviar requisições que não passam pelo dispatcher.  Seria mais interessante o dispatcher centralizar o tratamento de todas as requisições.  Enviar repetidamente 'index.php' para acessar o dispatcher deixa a URL longa e ainda diminui sua legibilidade.  Seria melhor padronizarmos uma URL mais resumida para definirmos o nome do controlador e da ação.
  • 17. Solução  Uma solução bastante interessante para os problemas abordados é a reescrita de URL.  Com esse recurso podemos fazer a seguinte convenção:  Para a URL: http://localhost/mvc/pessoa/mostra  Podemos dizer que:  mvc é um diretório da nossa aplicação  pessoa é o nosso controlador  mostra é a nossa ação que será executada no controlador.
  • 18. Reescrita de URL  Para usarmos reescrita de URL, precisamos habilitar o módulo de reescrita do Apache:  No arquivo: C:xamppliteapacheconfhttpd.conf descomente a seguinte linha:  LoadModule rewrite_module modules/mod_rewrite.so  Depois disso, criamos nossas regras de reescrita no arquivo .htaccess no diretório raiz da aplicação: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
  • 19. Reescrita de URL  No Ubuntu ainda é preciso alterar o AllowOverride para All no arquivo /etc/apache2/sites- available/default:  No XAMPP isso já vem habilitado. ... <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ...
  • 20. Flags de reescrita  L – Last Rule  Pára o processo de reescrita e não aplica regras adicionais.  Semelhante a um break do C, Java ou PHP.