Programação para WEB <ul><ul><li>Regis Pires Magalhães </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>Implement...
MVC – Modelo, Visão, Controlador <ul><li>Model-view-controller (MVC) é um padrão de arquitetura de software. </li></ul><ul...
MVC – Modelo, Visão, Controlador <ul><li>Como surgiu? </li></ul><ul><ul><li>Foi criado como padrão de projeto arquitetural...
Arquitetura MVC exibe o modelo Consulta ou altera o modelo define que visão será exibida
MVC – Modelo, Visão, Controlador <ul><li>Modelo </li></ul><ul><ul><li>Refere-se aos dados da aplicação. </li></ul></ul><ul...
Arquitetura MVC – Resumo  <ul><li>Modelos  – Dados; </li></ul><ul><li>Visões  – Como os dados são apresentados; </li></ul>...
Arquitetura MVC
Exemplo 1 – MVC Super Simples <ul><li>MVC bem simples para entendermos a divisão. </li></ul><ul><ul><li>Modelo – pessoa.ph...
Modelo - pessoa.php <?php class   Pessoa   { private   $nome ,   $fone ; function   __construct( $nome ,   $fone )   { $th...
Controlador - pessoa_controlador.php <?php require_once ( 'pessoa.php' ); class   PessoaControlador   { function   mostra(...
Visão - pessoa_visao.php < html > < head > < title > Pessoa </ title > </ head > < body >   < h1 > Pessoa - Visão </ h1 > ...
Exemplo 2 – MVC com Dispatcher <ul><li>Usando um front-controller ou dispatcher </li></ul><ul><ul><li>Há um controlador pr...
Dispatcher - index.php <?php $arq_controlador   =   $_GET [controlador]. '_controlador' ; $acao   =   $_GET [acao]; $class...
Controlador - pessoa_controlador.php <?php require_once ( 'pessoa.php' ); class   PessoaControlador   { function   mostra(...
Usando convenções <ul><li>Podemos convencionar algumas coisas. </li></ul><ul><li>Se um controlador não for definido, podem...
Convenções no Dispatcher <?php $arquivo_controlador   =   $_GET [controlador]   ?   $_GET [controlador]. '_controlador'   ...
Problemas <ul><li>Podemos enviar requisições que não passam pelo dispatcher. </li></ul><ul><ul><li>Seria mais interessante...
Solução <ul><li>Uma solução bastante interessante para os problemas abordados é a reescrita de URL. </li></ul><ul><li>Com ...
Reescrita de URL <ul><li>Para usarmos reescrita de URL, precisamos habilitar o módulo de reescrita do Apache: </li></ul><u...
Testando a Reescrita - index.php <?php $parametros   =   explode( '/' , $_GET [ 'url' ]); $controlador   =   $parametros [...
Upcoming SlideShare
Loading in …5
×

Php 05 Mvc

3,420
-1

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,420
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
296
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

Php 05 Mvc

  1. 1. Programação para WEB <ul><ul><li>Regis Pires Magalhães </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>Implementando a Arquitetura MVC em PHP
  2. 2. MVC – Modelo, Visão, Controlador <ul><li>Model-view-controller (MVC) é um padrão de arquitetura de software. </li></ul><ul><li>Para que serve? </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>Tornar aplicações mais flexíveis e extensíveis . </li></ul></ul><ul><ul><ul><li>Permite inclusive a substituição da tecnologia de uma camada sem afetar as demais. </li></ul></ul></ul>
  3. 3. MVC – Modelo, Visão, Controlador <ul><li>Como surgiu? </li></ul><ul><ul><li>Foi criado como padrão de projeto arquitetural usado em interfaces de usuário na linguagem Smalltalk . </li></ul></ul>
  4. 4. Arquitetura MVC exibe o modelo Consulta ou altera o modelo define que visão será exibida
  5. 5. MVC – Modelo, Visão, Controlador <ul><li>Modelo </li></ul><ul><ul><li>Refere-se aos dados da aplicação. </li></ul></ul><ul><ul><li>Pode usar mecanismos de armazenamento persistente (bancos de dados) ou não. </li></ul></ul><ul><li>Visão </li></ul><ul><ul><li>Determina como o modelo vai ser mostrado ao usuário. </li></ul></ul><ul><li>Controlador </li></ul><ul><ul><li>Recebe interações do usuário e a partir delas, manipula o modelo e determina a visão a ser usada. </li></ul></ul><ul><ul><li>Pode alterar o modelo ou apenas consultá-lo para posterior apresentação deste modelo a partir de uma determinada visão. </li></ul></ul><ul><ul><li>Em outras palavras, faz o “meio-de-campo” entre o modelo e a visão. </li></ul></ul>
  6. 6. Arquitetura MVC – Resumo <ul><li>Modelos – Dados; </li></ul><ul><li>Visões – Como os dados são apresentados; </li></ul><ul><li>Controladores – Recebe entrada de dados do usuário. Manipula o modelo e determina a visão para exibição do modelo. </li></ul>
  7. 7. Arquitetura MVC
  8. 8. Exemplo 1 – MVC Super Simples <ul><li>MVC bem simples para entendermos a divisão. </li></ul><ul><ul><li>Modelo – pessoa.php </li></ul></ul><ul><ul><li>Visão – pessoa_visao.php </li></ul></ul><ul><ul><li>Controlador – pessoa_controlador.php </li></ul></ul>
  9. 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. 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. 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. 12. Exemplo 2 – MVC com Dispatcher <ul><li>Usando um front-controller ou dispatcher </li></ul><ul><ul><li>Há um controlador principal (index.php) que despacha as requisições para controladores e ações específicos. </li></ul></ul><ul><ul><li>Controladores e ações específicos são definidos pelos parâmetros da URL do dispatcher: </li></ul></ul><ul><ul><ul><li>http://localhost/mvc/index.php?controlador=pessoa&acao=mostra </li></ul></ul></ul><ul><ul><li>No nosso exemplo, o dispatcher: </li></ul></ul><ul><ul><ul><li>Instancia o controlador especificado </li></ul></ul></ul><ul><ul><ul><li>Executa o método (ação) especificado do controlador instanciado. </li></ul></ul></ul>
  13. 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. 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. 15. Usando convenções <ul><li>Podemos convencionar algumas coisas. </li></ul><ul><li>Se um controlador não for definido, podemos usar um controlador padrão chamado de HomeControlador , por exemplo. </li></ul><ul><li>Caso uma ação não tenha sido definida, usamos a ação index , por exemplo. </li></ul><ul><li>Assim, se nada for dito, a ação index do controlador HomeControlador será executada. </li></ul><ul><li>Para isso, devemos alterar nosso dispatcher... </li></ul>
  16. 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. 17. Problemas <ul><li>Podemos enviar requisições que não passam pelo dispatcher. </li></ul><ul><ul><li>Seria mais interessante o dispatcher centralizar o tratamento de todas as requisições. </li></ul></ul><ul><li>Enviar o nome do controlador e da ação via parâmetros deixa a URL muito longa e ainda diminui sua legibilidade. </li></ul><ul><ul><li>Seria melhor padronizarmos uma URL mais resumida para definirmos o nome do controlador e da ação. </li></ul></ul>
  18. 18. Solução <ul><li>Uma solução bastante interessante para os problemas abordados é a reescrita de URL. </li></ul><ul><li>Com esse recurso podemos fazer a seguinte convenção: </li></ul><ul><ul><li>Para a URL: http://localhost/mvc/pessoa/mostra </li></ul></ul><ul><ul><li>Podemos dizer que: </li></ul></ul><ul><ul><ul><li>mvc é um diretório da nossa aplicação </li></ul></ul></ul><ul><ul><ul><li>pessoa é o nosso controlador </li></ul></ul></ul><ul><ul><ul><li>mostra é a nossa ação que será executada no controlador. </li></ul></ul></ul>
  19. 19. Reescrita de URL <ul><li>Para usarmos reescrita de URL, precisamos habilitar o módulo de reescrita do Apache: </li></ul><ul><ul><li>No arquivo: C:xamppliteapacheconfhttpd.conf descomente a seguinte linha: </li></ul></ul><ul><ul><ul><li>LoadModule rewrite_module modules/mod_rewrite.so </li></ul></ul></ul><ul><li>Depois disso, criamos nossas regras de reescrita no arquivo .htaccess no diretório raiz da aplicação: </li></ul><IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
  20. 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 >
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×