SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Entendendo a Arquitetura MVC
do Zend Framework
III Encontro PHP da Paraíba
Gedvan P. Dias - gedvan@gmail.com




                             Imagem:http://photogenetic.deviantart.com/art/architecture-69650308
OBJETIVOS

●   Mostrar uma visão geral da implementação MVC no
    ZF
●   Compreender o workflow das requisições HTTP nessa
    arquitetura
●   Mostrar alguns detalhes da implementação
●   Apresentar os principais componentes e classes
    envolvidas na implementação
●   Foco nos Controllers e Views
NÃO SÃO OBJETIVOS...

●   Explicar o que é MVC
●   Explicar o que é o Zend Framework
●   Discutir sobre utilização de padrões ou frameworks
●   Dar uma visão superficial do MVC
OBSERVAÇÕES SOBRE MVC E ZF

●   Implementações convencionais
●   Único ponto de entrada
    ●   usuarios.php, cadastro.php, perfil.php, … → index.php
●   Não estenda, plugue
    ●   Baixo acoplamento, Manutenibilidade, Escalabilidade
●   URL amigáveis
FRONT CONTROLLER
FRONT CONTROLLER

●   Zend_Controller_Front
●   Porta de entrada para o MVC
    ●   É executado no início da aplicação, logo após o bootstrap
●   Inicializar, Rotear e Despachar a Requisição
●   Enviar a resposta
●   Implementa o padrão Singleton
●   $_controllerDir
Entendendo a Arquitetura MVC do Zend Framework
O OBJETO REQUEST

●   Zend_Controller_Request_HTTP
●   Encapsula a requisição HTTP
    ●   Módulo
    ●   Controlador
    ●   Ação
    ●   Parâmetros
    ●   Cookies, Environment, Header, Server, etc.
O OBJETO REQUEST
●   Alguns métodos:
    ●   getModule(), GetController(), getAction()
    ●   isGet(), isPost(), isHead(), isPut()
    ●   getBaseURL()
    ●   getClientIP()
    ●   getCookie()
    ●   getHeader()
    ●   getParam()
    ●   getRawBody()
    ●   isSecure()
    ●
        isXmlHttpRequest()
O OBJETO RESPONSE

●   Zend_Controller_Response_HTTP
●   Encapsula a resposta HTTP
    ●   Body
    ●   Headers
    ●   HTTP Response Codes
    ●   Redirecionamento
O OBJETO RESPONSE
●   Alguns métodos
    ●   setBody(), appendBody(), prependBody()
    ●   setHeader()
    ●   setHttpResponseCode()
    ●   setRedirect()
    ●   canSendHeaders(), sendHeader()
    ●   SendResponse()
●   Named segments
    ●   $response->prepend('header', 'Cabeçalho');
    ●   $response->append('footer', 'Rodapé');
    ●   $response->append('default', 'Adicionado ao segmento padrão');
O ROUTER
ROUTER

●   Responsável por identificar quem (módulo, controlador
    e ação) deve receber a requisição
●   A partir do objeto Request
●   Rota padrão:
       :module/:controller/:action/*
ROUTER

●   Tipos de rotas
    ●   Zend_Controller_Router_Route
    ●   Zend_Controller_Router_Route_Static
    ●   Zend_Controller_Router_Route_Regex
●   Translated Segments
O DISPATCHER
O DISPATCHER

●   Responsabilidades:
    ●   Instancia o controlador ao qual a requisição está destinada
    ●   Invoca o método correspondente à ação da requisição
PLUGINS PARA O FC

●   Permitem adicionar funcionalidades ao workflow do
    MVC
●   Zend_Controller_Plugin_Abstract
●   Utiliza o padrão Observer
●   São registrados no FC através do método
    registerPlugin()
●   Zend_Controller_Plugin_Broker $_plugins
●   Zend_Controller_Plugin_ErrorHandler
PLUGINS PARA O FC

●   Eventos:
    ●   routeStartup()
    ●   routeShutdown()
    ●   dispatchLoopStartup()
    ●   preDispatch()
    ●   postDispatch()
    ●   dispatchLoopShutdown()
ACTION CONTROLLERS
Entendendo a Arquitetura MVC do Zend Framework
ACTION CONTROLLERS

●   Controladores de ação
●   Estendem a classe Zend_Controller_Action
●   Cada método público terminado em “Action” é uma ação
●   Executam ações de controle, não de negócio
    ●   Instanciação de forms;
    ●   Seleção da view e passagem de dados;
    ●   Chamada dos modelos; etc.
●   Thin Controllers → Fat Models
ACTION CONTROLLERS

●   Inicialização: método init()
●   preDispatch() e postDispatch()
ACTION HELPERS
ACTION HELPERS

●   São objetos que ajudam na realização de tarefas pelo
    controlador
●   Podem ser instanciados implicitamente ou carregados sob
    demanda
●   Podem executar ações automáticas
    ●   init, preDispatch, postDispatch
●   Ou serem invocados controlador
    ●   $this->_helper->nomeDoHelper
●   Helper Broker: $_helper
ACTION HELPERS

●   Como implementar?
    ●   Estender a classe Zend_Controller_Action_Helper_Abstract
    ●   Adicionar diretamente ao helper broker ou adicionar seu
        path e prefixo
    ●   Método direct()
ACTION HELPERS

●   Exemplos:
    ●   ViewRenderer
    ●   Redirector
●   Outros:
    ●   Logger
    ●   Session Messages
VIEW
VIEW
●   Responsáveis por gerar a saída da aplicação
●   Consiste em uma classe que “renderiza” um arquivo script
●   Os scripts contem código HTML com algum PHP
●   O resultado é inserido no objeto Response, que será enviado
    ao browser cliente
●   A engine padrão (Zend_View) é baseada em scripts PHP
●   Podem ser usadas outras engines (Smarty, TinyButStrong, PEAR
    Flexy, etc.)
VIEW HELPERS
VIEW HELPERS

●   São objetos que ajudam na tarefa das views
●   Normalmente, são usadas para automatizar a geração de
    código HTML
●   Uma vez registrados, são acessados como métodos da view
●   Exemplos:
    ●   BaseUrl:            $this->baseUrl('user/add');
    ●   HeadTags Helpers:   $this->headTitle('Título');
    ●   Elementos HTML:     $this->htmlList($itens);
    ●   Translate:          $this->translate('Texto');
WORKFLOW
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Entendendo a Arquitetura MVC do Zend Framework
Dúvidas?
Obrigado!

Contenu connexe

Tendances

Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Eduardo Mendes
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonPaula Grangeiro
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoEduardo Mendes
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3Flávio Lisboa
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarTiago Antônio da Silva
 

Tendances (20)

Vhosts dinâmico
Vhosts dinâmicoVhosts dinâmico
Vhosts dinâmico
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuração
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 

En vedette

Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleBruno Ricardo Siqueira
 
Design para não designers
Design para não designersDesign para não designers
Design para não designersKarlo Medeiros
 
AIX - Gerência de Processos
AIX - Gerência de ProcessosAIX - Gerência de Processos
AIX - Gerência de ProcessosJean Pimentel
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2William Felipe
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkFernando Geraldo Mantoan
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )Michael Douglas
 
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisMVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisJorge Tressino Rua
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Oficina Design para quem não é Designer
Oficina Design para quem não é DesignerOficina Design para quem não é Designer
Oficina Design para quem não é DesignerAndreza Jackson
 
Design Pra Quem Não é Designer
Design Pra Quem Não é DesignerDesign Pra Quem Não é Designer
Design Pra Quem Não é DesignerDaniela Fiuza
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDomingos Teruel
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 

En vedette (20)

Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony Console
 
Riesgos
RiesgosRiesgos
Riesgos
 
Green Tech
Green TechGreen Tech
Green Tech
 
Design para não designers
Design para não designersDesign para não designers
Design para não designers
 
AIX - Gerência de Processos
AIX - Gerência de ProcessosAIX - Gerência de Processos
AIX - Gerência de Processos
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend Framework
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões ArquiteturaisMVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
 
CobiT Foundation Free Training
CobiT Foundation Free TrainingCobiT Foundation Free Training
CobiT Foundation Free Training
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
Oficina Design para quem não é Designer
Oficina Design para quem não é DesignerOficina Design para quem não é Designer
Oficina Design para quem não é Designer
 
Design Pra Quem Não é Designer
Design Pra Quem Não é DesignerDesign Pra Quem Não é Designer
Design Pra Quem Não é Designer
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 

Similaire à Entendendo a Arquitetura MVC do Zend Framework

(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
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 FrameworkPablo Dall'Oglio
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08Carlos Santos
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Felipe Silveira
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2Felipe Pimentel
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Alexandre Tarifa
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2rodrigoareis
 

Similaire à Entendendo a Arquitetura MVC do Zend Framework (20)

(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
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
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08LabMM3 - Aula teórica 08
LabMM3 - Aula teórica 08
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Desenvolvendo aplicações web com GWT
Desenvolvendo aplicações web com GWTDesenvolvendo aplicações web com GWT
Desenvolvendo aplicações web com GWT
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1
 

Entendendo a Arquitetura MVC do Zend Framework

  • 1. Entendendo a Arquitetura MVC do Zend Framework III Encontro PHP da Paraíba Gedvan P. Dias - gedvan@gmail.com Imagem:http://photogenetic.deviantart.com/art/architecture-69650308
  • 2. OBJETIVOS ● Mostrar uma visão geral da implementação MVC no ZF ● Compreender o workflow das requisições HTTP nessa arquitetura ● Mostrar alguns detalhes da implementação ● Apresentar os principais componentes e classes envolvidas na implementação ● Foco nos Controllers e Views
  • 3. NÃO SÃO OBJETIVOS... ● Explicar o que é MVC ● Explicar o que é o Zend Framework ● Discutir sobre utilização de padrões ou frameworks ● Dar uma visão superficial do MVC
  • 4. OBSERVAÇÕES SOBRE MVC E ZF ● Implementações convencionais ● Único ponto de entrada ● usuarios.php, cadastro.php, perfil.php, … → index.php ● Não estenda, plugue ● Baixo acoplamento, Manutenibilidade, Escalabilidade ● URL amigáveis
  • 6. FRONT CONTROLLER ● Zend_Controller_Front ● Porta de entrada para o MVC ● É executado no início da aplicação, logo após o bootstrap ● Inicializar, Rotear e Despachar a Requisição ● Enviar a resposta ● Implementa o padrão Singleton ● $_controllerDir
  • 8. O OBJETO REQUEST ● Zend_Controller_Request_HTTP ● Encapsula a requisição HTTP ● Módulo ● Controlador ● Ação ● Parâmetros ● Cookies, Environment, Header, Server, etc.
  • 9. O OBJETO REQUEST ● Alguns métodos: ● getModule(), GetController(), getAction() ● isGet(), isPost(), isHead(), isPut() ● getBaseURL() ● getClientIP() ● getCookie() ● getHeader() ● getParam() ● getRawBody() ● isSecure() ● isXmlHttpRequest()
  • 10. O OBJETO RESPONSE ● Zend_Controller_Response_HTTP ● Encapsula a resposta HTTP ● Body ● Headers ● HTTP Response Codes ● Redirecionamento
  • 11. O OBJETO RESPONSE ● Alguns métodos ● setBody(), appendBody(), prependBody() ● setHeader() ● setHttpResponseCode() ● setRedirect() ● canSendHeaders(), sendHeader() ● SendResponse() ● Named segments ● $response->prepend('header', 'Cabeçalho'); ● $response->append('footer', 'Rodapé'); ● $response->append('default', 'Adicionado ao segmento padrão');
  • 13. ROUTER ● Responsável por identificar quem (módulo, controlador e ação) deve receber a requisição ● A partir do objeto Request ● Rota padrão: :module/:controller/:action/*
  • 14. ROUTER ● Tipos de rotas ● Zend_Controller_Router_Route ● Zend_Controller_Router_Route_Static ● Zend_Controller_Router_Route_Regex ● Translated Segments
  • 16. O DISPATCHER ● Responsabilidades: ● Instancia o controlador ao qual a requisição está destinada ● Invoca o método correspondente à ação da requisição
  • 17. PLUGINS PARA O FC ● Permitem adicionar funcionalidades ao workflow do MVC ● Zend_Controller_Plugin_Abstract ● Utiliza o padrão Observer ● São registrados no FC através do método registerPlugin() ● Zend_Controller_Plugin_Broker $_plugins ● Zend_Controller_Plugin_ErrorHandler
  • 18. PLUGINS PARA O FC ● Eventos: ● routeStartup() ● routeShutdown() ● dispatchLoopStartup() ● preDispatch() ● postDispatch() ● dispatchLoopShutdown()
  • 21. ACTION CONTROLLERS ● Controladores de ação ● Estendem a classe Zend_Controller_Action ● Cada método público terminado em “Action” é uma ação ● Executam ações de controle, não de negócio ● Instanciação de forms; ● Seleção da view e passagem de dados; ● Chamada dos modelos; etc. ● Thin Controllers → Fat Models
  • 22. ACTION CONTROLLERS ● Inicialização: método init() ● preDispatch() e postDispatch()
  • 24. ACTION HELPERS ● São objetos que ajudam na realização de tarefas pelo controlador ● Podem ser instanciados implicitamente ou carregados sob demanda ● Podem executar ações automáticas ● init, preDispatch, postDispatch ● Ou serem invocados controlador ● $this->_helper->nomeDoHelper ● Helper Broker: $_helper
  • 25. ACTION HELPERS ● Como implementar? ● Estender a classe Zend_Controller_Action_Helper_Abstract ● Adicionar diretamente ao helper broker ou adicionar seu path e prefixo ● Método direct()
  • 26. ACTION HELPERS ● Exemplos: ● ViewRenderer ● Redirector ● Outros: ● Logger ● Session Messages
  • 27. VIEW
  • 28. VIEW ● Responsáveis por gerar a saída da aplicação ● Consiste em uma classe que “renderiza” um arquivo script ● Os scripts contem código HTML com algum PHP ● O resultado é inserido no objeto Response, que será enviado ao browser cliente ● A engine padrão (Zend_View) é baseada em scripts PHP ● Podem ser usadas outras engines (Smarty, TinyButStrong, PEAR Flexy, etc.)
  • 30. VIEW HELPERS ● São objetos que ajudam na tarefa das views ● Normalmente, são usadas para automatizar a geração de código HTML ● Uma vez registrados, são acessados como métodos da view ● Exemplos: ● BaseUrl: $this->baseUrl('user/add'); ● HeadTags Helpers: $this->headTitle('Título'); ● Elementos HTML: $this->htmlList($itens); ● Translate: $this->translate('Texto');