SlideShare uma empresa Scribd logo
Programação para WEB Regis Pires Magalhães [email_address] 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 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.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.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 > < 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?controlador=pessoa&acao=mostra  No nosso exemplo, o dispatcher: Instancia o controlador especificado Executa o método (ação) especificado do controlador instanciado.
Dispatcher - index.php <?php $arq_controlador   =   $_GET [controlador]. '_controlador' ; $acao   =   $_GET [acao]; $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 ; call_user_func( array ( $obj ,   $acao ), $_REQUEST ); ?>
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' ); } } ?>
Usando convenções Podemos convencionar algumas coisas. Se um controlador não for definido, podemos usar um controlador padrão chamado de  HomeControlador , por exemplo. Caso uma ação não tenha sido definida, usamos a ação  index , por exemplo. Assim, se nada for dito, a ação  index  do controlador  HomeControlador  será executada.  Para isso, devemos alterar nosso dispatcher...
Convenções no Dispatcher <?php $arquivo_controlador   =   $_GET [controlador]   ?   $_GET [controlador]. '_controlador'   :   'home_controlador' ; $acao   =   $_GET [acao]   ?   $_GET [acao]   :   'index' ; $classe_controlador   =   str_replace( '_' ,   ' ' ,   $arquivo_controlador ); $classe_controlador   =   ucwords( $classe_controlador ); $classe_controlador   =   str_replace( ' ' ,   '' ,   $classe_controlador ); require_once ( $arquivo_controlador . '.php' ); $obj   =   new   $classe_controlador ; call_user_func( array ( $obj ,   $acao ), $_REQUEST ); ?>
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 o nome do controlador e da ação via parâmetros deixa a URL muito 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:\xampplite\apache\conf\httpd.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: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
Testando a Reescrita - index.php <?php $parametros   =   explode( '/' , $_GET [ 'url' ]); $controlador   =   $parametros [ 0 ]; $acao   =   $parametros [ 1 ]; ?> < html > < head > < title > Testa Reescrita </ title > </ head > < body > < h1 > Testa Reescrita </ h1 > < p > URL:  <? =   $_GET [ 'url' ]   ?> </ p > < p > Controlador:  <? =   $controlador   ?> </ p > < p > Ação:  <? =   $acao   ?> </ p > </ body > </ html >

Mais conteúdo relacionado

PDF
Introduction to Docker Compose
PDF
Introdução à Programação Web com Angular
PDF
Ansible
PPTX
Apresentação mvc
PDF
Introdução ao Desenvolvimento Android
PDF
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2
PDF
Aula de Introdução - JAVA
PPTX
What is Docker
Introduction to Docker Compose
Introdução à Programação Web com Angular
Ansible
Apresentação mvc
Introdução ao Desenvolvimento Android
Desenvolvimento de aplicações para dispositivos móveis módulo i - aula 2
Aula de Introdução - JAVA
What is Docker

Mais procurados (20)

PPTX
Docker: From Zero to Hero
PPTX
HTML5: The Next Internet Goldrush
PPSX
Android - Programação para dispositivos móveis (Aula 1)
PDF
Banco de Dados - MySQL Basico
PPTX
Trabalho uml
PPT
Introdução a dispositivos móveis.
PPTX
Basic android-ppt
PDF
포트폴리오 오경원
PDF
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
PPTX
VisiQuate: Azure cloud migration case study
PPTX
Getting started with Docker
PDF
.NET Core, ASP.NET Core Course, Session 1
PPTX
Docker 101 : Introduction to Docker and Containers
PPTX
Docker-Dasar.pptx
PDF
Node.js e Express
ODP
Introduction to Ansible
PDF
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
PDF
Android device driver structure introduction
PDF
Android SDK Tutorial | Edureka
PPTX
Introduction to Docker - 2017
Docker: From Zero to Hero
HTML5: The Next Internet Goldrush
Android - Programação para dispositivos móveis (Aula 1)
Banco de Dados - MySQL Basico
Trabalho uml
Introdução a dispositivos móveis.
Basic android-ppt
포트폴리오 오경원
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
VisiQuate: Azure cloud migration case study
Getting started with Docker
.NET Core, ASP.NET Core Course, Session 1
Docker 101 : Introduction to Docker and Containers
Docker-Dasar.pptx
Node.js e Express
Introduction to Ansible
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Android device driver structure introduction
Android SDK Tutorial | Edureka
Introduction to Docker - 2017
Anúncio

Destaque (20)

PDF
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
ODP
Usando MVC para agilizar o desenvolvimento
PPTX
Palestra Flisol 2012 - Campinas
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
Strings, Arrays e Manipulação Datas em PHP
PDF
Test-Driven Development with PHP
PDF
Variaveis Superglobais
PDF
Cookies e Sessões e PHP
PDF
Criando e consumindo webservice REST com PHP e JSON
PPT
Aula 5 - Cookies e Sessões em PHP
ODP
Desenvolvimento Mobile Web usando PHP
PDF
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
PDF
Web Service and PHP, REST and SOAP
PDF
Como implementar APIs RESTful em PHP
PDF
Construindo uma Rede Social com PHP e Software Livre
PDF
Polimorfismo
PDF
php4android: desenvolva aplicações android em PHP
PDF
Servicio y Consumo de Servicios REST en PHP
PDF
Consuming RESTful services in PHP
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Usando MVC para agilizar o desenvolvimento
Palestra Flisol 2012 - Campinas
Serversidephp pptx2-120418140114-phpapp01
Strings, Arrays e Manipulação Datas em PHP
Test-Driven Development with PHP
Variaveis Superglobais
Cookies e Sessões e PHP
Criando e consumindo webservice REST com PHP e JSON
Aula 5 - Cookies e Sessões em PHP
Desenvolvimento Mobile Web usando PHP
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Web Service and PHP, REST and SOAP
Como implementar APIs RESTful em PHP
Construindo uma Rede Social com PHP e Software Livre
Polimorfismo
php4android: desenvolva aplicações android em PHP
Servicio y Consumo de Servicios REST en PHP
Consuming RESTful services in PHP
Anúncio

Semelhante a Php 05 Mvc (20)

ODP
Prog web 08-php-mvc
PDF
Entendendo a Arquitetura MVC do Zend Framework
PPTX
Slide 01 introdução ao php e ao code igniter
PDF
Zend Framework
PPT
Programação Web com Zend Framework e Ajax com Dojo
PPTX
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
PDF
PHPZEIRO: Adote um framework
PDF
CakePHP - Aprendendo a fazer o primeiro bolo
PDF
Conceitos e Frameworks para Arquitetura MVC.pdf
ODP
Da argila ao forte: como desenvolver uma loja com PagSeguro
PPTX
Arquitetura e Frameworks para Arquitetura MVC.pptx
PPTX
Programando php com excelência
PDF
Desenvolvimento Web com CakePHP
PDF
Slide Aula - Curso CakePHP
PDF
Desenvolvimento em Três Camadas com PHP, MVC e AJAX
PPTX
MVC e Frameworks MVC
PDF
Desenvolvimento Web Avançado usando PHP
PPTX
Apresentação faef
PPT
Minicurso code igniter aula 2
PPT
Apresentação faef
Prog web 08-php-mvc
Entendendo a Arquitetura MVC do Zend Framework
Slide 01 introdução ao php e ao code igniter
Zend Framework
Programação Web com Zend Framework e Ajax com Dojo
Infoeste 2014 - Desenvolvimento de um CMS com Codeigniter Framework(PHP)
PHPZEIRO: Adote um framework
CakePHP - Aprendendo a fazer o primeiro bolo
Conceitos e Frameworks para Arquitetura MVC.pdf
Da argila ao forte: como desenvolver uma loja com PagSeguro
Arquitetura e Frameworks para Arquitetura MVC.pptx
Programando php com excelência
Desenvolvimento Web com CakePHP
Slide Aula - Curso CakePHP
Desenvolvimento em Três Camadas com PHP, MVC e AJAX
MVC e Frameworks MVC
Desenvolvimento Web Avançado usando PHP
Apresentação faef
Minicurso code igniter aula 2
Apresentação faef

Mais de Regis Magalhães (20)

PDF
High Dimensional Data
PDF
Web Scale Data Management
PPTX
PHP 10 CodeIgniter
ODP
Prog web 01-php-introducao
ODP
Prog web 02-php-primeiros-passos
ODP
Prog web 00-modelo-cliente_servidor_web
ODP
Prog web 09-php-crud-mvc
ODP
Prog web 07-pdo
ODP
Prog web 06-php-oo
ODP
Prog web 05-php-mysql
ODP
Prog web 04-php-gd
PPT
Prog web 03-php-sessoes-cookies_cabecalhos
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
PDF
Linked Data Tutorial - Conferencia W3C Brasil 2011
PDF
Linked Data - Minicurso - SBBD 2011
ODP
Curso Ruby
High Dimensional Data
Web Scale Data Management
PHP 10 CodeIgniter
Prog web 01-php-introducao
Prog web 02-php-primeiros-passos
Prog web 00-modelo-cliente_servidor_web
Prog web 09-php-crud-mvc
Prog web 07-pdo
Prog web 06-php-oo
Prog web 05-php-mysql
Prog web 04-php-gd
Prog web 03-php-sessoes-cookies_cabecalhos
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
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data - Minicurso - SBBD 2011
Curso Ruby

Php 05 Mvc

  • 1. Programação para WEB Regis Pires Magalhães [email_address] 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 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.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.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 > < 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?controlador=pessoa&acao=mostra No nosso exemplo, o dispatcher: Instancia o controlador especificado Executa o método (ação) especificado do controlador instanciado.
  • 13. Dispatcher - index.php <?php $arq_controlador = $_GET [controlador]. '_controlador' ; $acao = $_GET [acao]; $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 ; call_user_func( array ( $obj , $acao ), $_REQUEST ); ?>
  • 14. 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' ); } } ?>
  • 15. Usando convenções Podemos convencionar algumas coisas. Se um controlador não for definido, podemos usar um controlador padrão chamado de HomeControlador , por exemplo. Caso uma ação não tenha sido definida, usamos a ação index , por exemplo. Assim, se nada for dito, a ação index do controlador HomeControlador será executada. Para isso, devemos alterar nosso dispatcher...
  • 16. Convenções no Dispatcher <?php $arquivo_controlador = $_GET [controlador] ? $_GET [controlador]. '_controlador' : 'home_controlador' ; $acao = $_GET [acao] ? $_GET [acao] : 'index' ; $classe_controlador = str_replace( '_' , ' ' , $arquivo_controlador ); $classe_controlador = ucwords( $classe_controlador ); $classe_controlador = str_replace( ' ' , '' , $classe_controlador ); require_once ( $arquivo_controlador . '.php' ); $obj = new $classe_controlador ; call_user_func( array ( $obj , $acao ), $_REQUEST ); ?>
  • 17. 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 o nome do controlador e da ação via parâmetros deixa a URL muito longa e ainda diminui sua legibilidade. Seria melhor padronizarmos uma URL mais resumida para definirmos o nome do controlador e da ação.
  • 18. 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.
  • 19. Reescrita de URL Para usarmos reescrita de URL, precisamos habilitar o módulo de reescrita do Apache: No arquivo: C:\xampplite\apache\conf\httpd.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: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
  • 20. Testando a Reescrita - index.php <?php $parametros = explode( '/' , $_GET [ 'url' ]); $controlador = $parametros [ 0 ]; $acao = $parametros [ 1 ]; ?> < html > < head > < title > Testa Reescrita </ title > </ head > < body > < h1 > Testa Reescrita </ h1 > < p > URL: <? = $_GET [ 'url' ] ?> </ p > < p > Controlador: <? = $controlador ?> </ p > < p > Ação: <? = $acao ?> </ p > </ body > </ html >