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 >
Anúncio

Mais conteúdo relacionado

Mais procurados (20)

MVC ppt presentation
MVC ppt presentationMVC ppt presentation
MVC ppt presentation
Bhavin Shah
 
T1 g13.modelo cascata
T1 g13.modelo cascataT1 g13.modelo cascata
T1 g13.modelo cascata
wilsonguns
 
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
Amazon Web Services Korea
 
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
Amazon Web Services Korea
 
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage GatewayAWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
 
AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
 AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017 AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Amazon EventBridge
Amazon EventBridgeAmazon EventBridge
Amazon EventBridge
Dhaval Nagar
 
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
AWS Korea 금융산업팀
 
AWS エンジニア育成における効果的なトレーニング活用のすすめ
AWS エンジニア育成における効果的なトレーニング活用のすすめAWS エンジニア育成における効果的なトレーニング活用のすすめ
AWS エンジニア育成における効果的なトレーニング活用のすすめ
Trainocate Japan, Ltd.
 
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
株式会社オプト 仙台ラボラトリ
 
Aws overview
Aws overviewAws overview
Aws overview
Minh Nghiem
 
20201125 EC Solution Seminar Recommend
20201125 EC Solution Seminar Recommend20201125 EC Solution Seminar Recommend
20201125 EC Solution Seminar Recommend
Amazon Web Services Japan
 
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon Web Services Korea
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオ
junichi anno
 
Microsoft System Center Service Manager on a Single Computer
Microsoft System Center Service Manager on a Single ComputerMicrosoft System Center Service Manager on a Single Computer
Microsoft System Center Service Manager on a Single Computer
Shahab Al Yamin Chawdhury
 
Building Event-driven Architectures with Amazon EventBridge
Building Event-driven Architectures with Amazon EventBridge Building Event-driven Architectures with Amazon EventBridge
Building Event-driven Architectures with Amazon EventBridge
James Beswick
 
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
Amazon Web Services Korea
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Web Services Japan
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC Structure
Dipika Wadhvani
 
MVC ppt presentation
MVC ppt presentationMVC ppt presentation
MVC ppt presentation
Bhavin Shah
 
T1 g13.modelo cascata
T1 g13.modelo cascataT1 g13.modelo cascata
T1 g13.modelo cascata
wilsonguns
 
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
Amazon Web Services Korea
 
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
AWS Summit Seoul 2023 | AWS에서 최소한의 비용으로 구현하는 멀티리전 DR 자동화 구성
Amazon Web Services Korea
 
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage GatewayAWS Black Belt Online Seminar 2017 AWS Storage Gateway
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
 
AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
 AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017 AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
AWS 엣지 서비스를 통한 글로벌 서비스 관리 전략 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Amazon EventBridge
Amazon EventBridgeAmazon EventBridge
Amazon EventBridge
Dhaval Nagar
 
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
[금융고객을 위한 Resiliency in the Cloud] AWS를 활용한 금융사 Resiliency 구성...
AWS Korea 금융산업팀
 
AWS エンジニア育成における効果的なトレーニング活用のすすめ
AWS エンジニア育成における効果的なトレーニング活用のすすめAWS エンジニア育成における効果的なトレーニング活用のすすめ
AWS エンジニア育成における効果的なトレーニング活用のすすめ
Trainocate Japan, Ltd.
 
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon EC2 Deep Dive - 이창수 (AWS 솔루션 아키텍트) : 8월 온라인 세미나
Amazon Web Services Korea
 
Active Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオActive Directory をInternetから使用するための4つのシナリオ
Active Directory をInternetから使用するための4つのシナリオ
junichi anno
 
Microsoft System Center Service Manager on a Single Computer
Microsoft System Center Service Manager on a Single ComputerMicrosoft System Center Service Manager on a Single Computer
Microsoft System Center Service Manager on a Single Computer
Shahab Al Yamin Chawdhury
 
Building Event-driven Architectures with Amazon EventBridge
Building Event-driven Architectures with Amazon EventBridge Building Event-driven Architectures with Amazon EventBridge
Building Event-driven Architectures with Amazon EventBridge
James Beswick
 
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...
Amazon Web Services Korea
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Web Services Japan
 
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC Structure
Dipika Wadhvani
 

Destaque (20)

Slides
SlidesSlides
Slides
profissional_alves
 
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Desenvolvimento em Três Camadas com PHP, MVC e AjaxDesenvolvimento em Três Camadas com PHP, MVC e Ajax
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Almir Neto
 
Usando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimentoUsando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimento
Alexandre Andrade
 
Palestra Flisol 2012 - Campinas
Palestra Flisol 2012 - CampinasPalestra Flisol 2012 - Campinas
Palestra Flisol 2012 - Campinas
Anderson de Castro
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
Daniel Arndt Alves
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
Cezar Souza
 
Variaveis Superglobais
Variaveis SuperglobaisVariaveis Superglobais
Variaveis Superglobais
Daniel Arndt Alves
 
Cookies e Sessões e PHP
Cookies e Sessões e PHPCookies e Sessões e PHP
Cookies e Sessões e PHP
Humberto Moura
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
Ambiente Livre
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
Lucas Augusto Fagundes
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
Bruno Fernandes "PorKaria"
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Otávio Calaça Xavier
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAP
Elwin Huaman
 
Como implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHPComo implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHP
Pablo Aguiar
 
Construindo uma Rede Social com PHP e Software Livre
Construindo uma Rede Social com PHP e Software LivreConstruindo uma Rede Social com PHP e Software Livre
Construindo uma Rede Social com PHP e Software Livre
Elton Minetto
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Daniel Arndt Alves
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
Ramon Ribeiro Rabello
 
Servicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHPServicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHP
David J. Brenes
 
Consuming RESTful services in PHP
Consuming RESTful services in PHPConsuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
 
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Desenvolvimento em Três Camadas com PHP, MVC e AjaxDesenvolvimento em Três Camadas com PHP, MVC e Ajax
Desenvolvimento em Três Camadas com PHP, MVC e Ajax
Almir Neto
 
Usando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimentoUsando MVC para agilizar o desenvolvimento
Usando MVC para agilizar o desenvolvimento
Alexandre Andrade
 
Palestra Flisol 2012 - Campinas
Palestra Flisol 2012 - CampinasPalestra Flisol 2012 - Campinas
Palestra Flisol 2012 - Campinas
Anderson de Castro
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
Daniel Arndt Alves
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
Cezar Souza
 
Cookies e Sessões e PHP
Cookies e Sessões e PHPCookies e Sessões e PHP
Cookies e Sessões e PHP
Humberto Moura
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
Ambiente Livre
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Otávio Calaça Xavier
 
Web Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAPWeb Service and PHP, REST and SOAP
Web Service and PHP, REST and SOAP
Elwin Huaman
 
Como implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHPComo implementar APIs RESTful em PHP
Como implementar APIs RESTful em PHP
Pablo Aguiar
 
Construindo uma Rede Social com PHP e Software Livre
Construindo uma Rede Social com PHP e Software LivreConstruindo uma Rede Social com PHP e Software Livre
Construindo uma Rede Social com PHP e Software Livre
Elton Minetto
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
Ramon Ribeiro Rabello
 
Servicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHPServicio y Consumo de Servicios REST en PHP
Servicio y Consumo de Servicios REST en PHP
David J. Brenes
 
Consuming RESTful services in PHP
Consuming RESTful services in PHPConsuming RESTful services in PHP
Consuming RESTful services in PHP
Zoran Jeremic
 
Anúncio

Semelhante a Php 05 Mvc (20)

Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
Regis Magalhães
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
Andre Baltieri
 
Apresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVCApresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVC
Zarathon Maia
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
David O'Keefe
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Thyago Maia
 
Angular js
Angular jsAngular js
Angular js
Bruno Catão
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Diego Tremper
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
Campus Party Brasil
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
Campus Party Brasil
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
Alexandre S. Oliveira
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
Regis Magalhães
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
Marcelo Rodrigo
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
Alexandre Tarifa
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
guestea329c
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
Andre Baltieri
 
Apresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVCApresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVC
Zarathon Maia
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
David O'Keefe
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Desenvolvimento de sistemas web com PHP Frameworks - Aula 2
Thyago Maia
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
Marcelo Rodrigo
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
guestea329c
 
Anúncio

Mais de Regis Magalhães (20)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
Regis Magalhães
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
Regis Magalhães
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
Regis Magalhães
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
Regis Magalhães
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
Regis Magalhães
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
Regis Magalhães
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
Regis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
Regis Magalhães
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
Regis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
Regis Magalhães
 

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 >
  翻译: