entendendo a arquitetura mvc do zend framework
DESCRIPTION
Uma descrição em um nível médio de profundidade sobre a implementação do padrão MVC no Zend Framerwork, mostrando os principais componentes envolvidos, suas relações e a sequência de execução.TRANSCRIPT
Entendendo a Arquitetura MVC Entendendo a Arquitetura MVC do Zend Frameworkdo Zend FrameworkIII Encontro PHP da ParaíbaIII Encontro PHP da ParaíbaGedvan P. Dias - [email protected] P. Dias - [email protected]
Imagem:http://photogenetic.deviantart.com/art/architecture-69650308
OBJETIVOSOBJETIVOS
● 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...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 ZFOBSERVAÇÕ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 CONTROLLERFRONT 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
O OBJETO REQUESTO 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 REQUESTO OBJETO REQUEST
● Alguns métodos:● getModule(), GetController(), getAction()
● isGet(), isPost(), isHead(), isPut()
● getBaseURL()
● getClientIP()
● getCookie()
● getHeader()
● getParam()
● getRawBody()
● isSecure()
● isXmlHttpRequest()
O OBJETO RESPONSEO OBJETO RESPONSE
● Zend_Controller_Response_HTTP● Encapsula a resposta HTTP
● Body● Headers● HTTP Response Codes● Redirecionamento
O OBJETO RESPONSEO 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
ROUTERROUTER
● 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/*
ROUTERROUTER
● Tipos de rotas● Zend_Controller_Router_Route● Zend_Controller_Router_Route_Static● Zend_Controller_Router_Route_Regex
● Translated Segments
O DISPATCHER
O DISPATCHERO 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 FCPLUGINS 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 FCPLUGINS PARA O FC
● Eventos:● routeStartup()● routeShutdown()● dispatchLoopStartup()● preDispatch()● postDispatch()● dispatchLoopShutdown()
ACTION CONTROLLERS
ACTION CONTROLLERSACTION 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 CONTROLLERSACTION CONTROLLERS
● Inicialização: método init()● preDispatch() e postDispatch()
ACTION HELPERS
ACTION HELPERSACTION 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 HELPERSACTION 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 HELPERSACTION HELPERS
● Exemplos:● ViewRenderer● Redirector
● Outros:● Logger● Session Messages
VIEW
VIEWVIEW
● 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 HELPERSVIEW 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
Dúvidas?
Obrigado!