Naked Zend_Layout e Zend_View
Neste artigo mirar para usar Zend_Layout e Zend_View xunto cun controlador frontal simple para amosar como se pode comezar a separar lóxica de negocio e de presentación dentro da súa aplicación. Todo o código está dispoñible no github:
Naked Zend_Layout e Zend_View no GitHub .
MVC
Un común patrón de deseño para aplicacións web moderna é o patrón MVC. O Zend Framework 'cheo' pila é un modo de aplicación do MVC en PHP e consiste en tres partes:
- Modelo (M)
- Ver (V)
- Controller (C)
O patrón está deseñado de tal forma que a lóxica de negocio e presentación son completamente separadas unha da outra (con lóxica de negocio no modelo, e da presentación na vista) e controlador de audiencia no medio da condución de "orquestra".
Presentación e Lóxica
No Zend Framework o punto de vista é tratado por dous compoñentes principais: Zend_View e Zend_Layout. Zend_Layout como o seu nome suxire coida do aspecto esquema do sitio web (xeralmente, cabeceiras, rodapés, barras laterais, etc.) Zend_View concéntrase na presentación dos datos que o modelo está a traballar para producir ou obter.
Como desenvolvedores, e as súas aplicacións, evolucionar, tenden a moverse a través de varias etapas, xeralmente cada unha mellora no mantemento, mellora e anterior a extensibilidade. Unha das cuestións principais é que a presentación ea lóxica aínda obter mesturaron e non é sinxelo de comezar a separar os dous.
O que hai de malo a mestura dos dous?
Hai varias razóns para a mestura de diferentes partes do programa, por exemplo, un estudio a traballar na súa páxina web pode non querer (ou ter o coñecemento) para facer a exploración en torno a código tentando descubrir onde facer cambios presentación. Do mesmo xeito que un programador (se é como eu que ten as habilidades de deseño dun avestruz) pode saír nun suor frío cando se menciona o traballo de deseño ou UI.
Ademais, e máis tarde desexa presentar os seus sitios web en diferentes soportes, como teléfonos móbiles, tablet PC, ou expoñer os datos vía Web Services (XML / JSON / etc)? Tendo presentación mixta e lóxica queda case sen esperanza, sen algúns hacks moi feo para tirar a presentación de volta para fóra do seu código, antes de inxectar algo novo. Se os datos ea presentación foi separada de facer estas modificacións son case trivial, cree un script nova visión ao novo formato e solicitudes directas, segundo corresponda.
Separando os dous
Nun programa en desenvolvemento que non sempre é económica para iniciar a posta en marcha dunha solución MVC completo ea aplicación que ser migre lentamente - ás veces correndo o código antigo, en paralelo co novo. É quizais a de que existen masas de lóxica (como a instalación de base de datos de conexión, identificación, manipulación de cookies, etc) que non está preparado para adaptala a súa configuración cadros escollidos, por tanto, o código antigo e coñecido-ser-traballo poden seguir sendo utilizados ata o momento en que pode ser reescrito / refatorado.
Nota: Usando Zend_Layout Zend_View e como esta é perfectamente aceptable dentro da paisaxe Zend Framework eo cadro foi deseñado de tal forma que os compoñentes individuais poden ser usados sen o resto do cadro. Unha gran vantaxe en aplicacións en evolución e probablemente unha das principais razóns para a súa elevada aceptación en aplicacións empresariais.
Front Controller
Abaixo podo crear un controlador de fronte - nun único arquivo designado para incorporarse as peticións que non corresponden a un arquivo no sistema de arquivos. Que xeralmente faise usando un ficheiro htaccess. Igual que o usado no padrón Zend Framework instalar. Dentro do controlador de fronte eu vou ser a creación do noso esquema e ver e mostrar onde as distintas partes do talão de solicitude para el.
define ('APP_PATH', dirname (__FILE__ ).'/..'); / / Output buffering Inicio ob_start (); / / Crea unha instancia Zend_View Zend_Layout: startMvc (); $ Esquema = Zend_Layout: getMvcInstance (); $ SetLayoutPath> esquema (APP_PATH. "Esquema / scripts) -> SetViewSuffix ('phtml') -> SetLayout ('index'); $ View = $ GetView esquema-> () - SetScriptPath> (APP_PATH 'view / scripts). - AddHelperPath> (. APP_PATH '/ library / Zend / View / helper', 'Zend_View_Helper'); / / Set URL base - ok * * case espida, pero non precisa de iso! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ ["HTTP_HOST '] _SERVER); try { / ** * Realiza un programa de enrutamento ... * - Podería estar usando isto como un controlador de fronte e dirixir todas as peticións * A través deste ficheiro (un ficheiro solicitado non existe no sistema de arquivos * - Teña en conta o método de abaixo é realmente só para demostración, sería * Horríbel con un gran sitio * / rede ($ ['page'] _GET) { 'Index' caso: «Excepción» caso: Pagename $ = $ ['page'] _GET; break; default: Pagename $ = false; break; } / / Non exemplo dunha páxina que está a ser atopado ... if ($ pagename === false) { $ ResponseHeader = 'HTTP/1.1 404 páxina non encontrada'; throw new Exception ("páxina non atopada \"); } / ** * Engadir datos ao seu obxecto de vista aquí * Pode ter o seu propio controlador de execución ou algún inclúe arquivos * Onde a lóxica de negocio é, en parte, separado da lóxica da visión * / displayText $ view-> = 'Ola de Lloyd'; ButtonText $ view-> = 'I \' m non activa '; ("{$ Phtml pagename}.") $ Esquema-> content = render $ view->; echo $ render> esquema (); } Catch (Exception $ e) { / / Limpa xa buffer de contido - que non quere amosar iso! ob_clean (); if (! isset ($ responseHeader)) { $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error'; } cabeceira ($ responseHeader); excepción $ view-> = $ e; $ Esquema-> content = render $ view-> ('error.phtml'); echo $ render> esquema (); }
En primeiro lugar, iniciar o buffer de saída, ao facelo, podemos definir os cabezallos en calquera punto da solicitude e saber que se pode envialos. Unha excepción é lanzada en calquera fase da execución do código que limpar este buffer e escribir ou contido da mensaxe de erro e deseño. Isto garante que non entregar parte prestados contido con erros para o usuario final.
A continuación, un exemplo MVC nova Zend_Layout é xerado e que dicirlle que a scripts esquema ten o phtml extensión, atópanse en un directorio fora do camiño público, e que o noso esquema estándar é chamado de índice (. Phtml). Dende o deseño, nós entón extraer o obxecto de exhibición (en que dedicamos os nosos datos para que apareza) e aplicar de configuración similar.
A continuación, configurar o obxecto de exhibición con unha referencia para os axudantes estándar Zend_View. Ver axudantes son conxuntos de características conveniencia adicional. Por exemplo, escribindo unha boia en formato monetaria, ou a creación dunha táboa con franxas de cebra (que se pode ler sobre aquí ). Ao estender Zend_View_Helper_Abstract e engadindo a súa propia biblioteca, neste punto se pode usar o seu propio punto de vista axudantes aplicación.
O resto do código da aplicación está agora implicado nun try catch} {{bloque}. Se algo xogar unha excepción podemos pegalo e amosar unha fermosa mensaxe de erro para o usuario final.
A nosa primeira tarefa dentro do catch try {} {} é para solicitar o noso percorrido, o que o usuario quere ver? Aquí eu implementar un código de demostración moi sinxelo, onde eu verifica o valor da 'páxina' get variable. Seu enrutamento pode ser moito máis complexa. O enrutamento é usado para chamar o que sempre o código que ser executado para obter / manipular os datos facilitados polo usuario e para dicir ao sistema que ver (e posiblemente script do esquema) para usar.
En último caso, se o router non coincide con ningunha páxina que define un código de resposta 404 e exhibe unha fermosa páxina non atopada mensaxe para o usuario final. Aquí, imos xogar e pegar a nosa propia excepción (e unha excepción moi xenéricos a iso), pero probablemente estaría botando súa propia excepción dentro do código do router.
Así que temos éxito encamiñado noso pedido, podemos empezar a facer algo co código. Pode ser que teña os seus propios instaladores / modelos aplicados ou incluír un código que xa foi separado un pouco. Aquí xogo un par de variables simple de ver o obxecto.
Cando isto for concluído, simplemente facer os puntos de vista cos nosos datos. Se o código lanza unha excepción para calquera razón que esta é detido preto da parte inferior do script. Aquí somos xa claro buffer de saída, establecer unha cabeceira de resposta de 500, e dicir ao noso solicitude para procesar o script 'erro' de vista (que xeralmente é unha versión moi simplificada do esquema normal / ver e rexistra o erro para comprobar máis tarde).
Como a visión é procesada primeiro e inxectado no esquema se pode cambiar o deseño dende o punto de vista, e de feito definido extras necesarios, por exemplo,
- Título da páxina
- Metatags
- Scripts (URL ou código) para a sección <head>
- Engadir estilos adicional, etc
Ademais, ata se pode cambiar todo o esquema dende a exhibición utilizar ...
esquema () <php $ this? -> setLayout ('alternativeLayout')>? ... Como e cando sexa necesario.
Finalmente ...
Espero que isto fose unha introdución útil para Zend_Layout e Zend_View e que lle permitirá comezar a aplicar o seu propio MVC básica e mellorar a maintainibility / extensibilidade do código. Por favor, bótalle un ollo ao código fonte de exemplos de uso (consulte o ficheiro README para ver instrucións).
O código presume que xa ten autoloading de traballo (ou de incluír as clases obrigatorias). Ademais, eu non recomenda que aplicar o enrutamento de datos ou configuración como antes, isto é moito máis simplificado para demostración. Para ver o código completo, bótalle un ollo ao código fonte ligada na parte superior deste artigo.
Zend Framework: 1.10.6


















































Ben escrito e máis informativa, grazas!