Your SlideShare is downloading. ×
Php 05 Mvc
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Php 05 Mvc

3,246

Published on

1 Comment
6 Likes
Statistics
Notes
  • 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!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
3,246
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
285
Comments
1
Likes
6
Embeds 0
No embeds

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 >

×