Php 05 Mvc
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Cara esse arquivo pessoa_visao precisa ter um echo antes dos objetos '$pessoa->getNome();' e '$pessoa->getFone();',
    Outra coisa, o php não reconhece essa Tag's ', eu sei q é somente a caráter didático, mas não fica ruim colocar um exemplo que funcione, certo?
    abraço!
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
5,173
On Slideshare
5,148
From Embeds
25
Number of Embeds
2

Actions

Shares
Downloads
276
Comments
1
Likes
6

Embeds 25

http://www.slideshare.net 18
http://ead.setrem.com.br 7

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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.
  • 7. Arquitetura MVC
  • 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: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:
    <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 >