Naked Zend_Layout e Zend_View
Neste artigo eu olhar para usar Zend_Layout e Zend_View juntamente com um controlador frontal simples para mostrar como é possível começar a separar lógica de negócios e de apresentação dentro da sua aplicação. Todo o código está disponível no github:
Naked Zend_Layout e Zend_View no GitHub .
MVC
Um comum padrão de design para aplicações web moderna é o padrão MVC. O Zend Framework 'cheio' pilha é um modo de aplicação do MVC em PHP e consiste em três partes:
- Modelo (M)
- Ver (V)
- Controller (C)
O padrão é projetado de tal forma que a lógica de negócios e apresentação são completamente separadas uma da outra (com lógica de negócios no modelo, e da apresentação na vista) e controlador de audiência no meio da condução de "orquestra".
Apresentação e Lógica
No Zend Framework o ponto de vista é tratado por dois componentes principais: Zend_View e Zend_Layout. Zend_Layout como o nome sugere cuida do aspecto layout do site (geralmente, cabeçalhos, rodapés, barras laterais, etc.) Zend_View concentra-se na apresentação dos dados que o modelo tem vindo a trabalhar para produzir ou obter.
Como desenvolvedores, e suas aplicações, evoluir, tendem a se mover através de várias etapas, geralmente cada uma melhoria na manutenção, melhoria e anterior a extensibilidade. Uma das questões principais é que a apresentação ea lógica ainda obter misturaram e não é simples de começar a separar os dois.
O que há de errado com a mistura dos dois?
Há várias razões para a mistura de diferentes partes do aplicativo, por exemplo, um designer trabalhando em seu site pode não querer (ou ter o conhecimento) para fazer a varredura em torno de código tentando descobrir onde fazer mudanças apresentação. Da mesma forma que um desenvolvedor (se você for como eu que tem as habilidades de design de um avestruz) pode sair em um suor frio quando você menciona o trabalho de design ou UI.
Além disso, e se mais tarde você gostaria de apresentar os seus sites em diferentes suportes, como telefones celulares, tablet PCs, ou expor os dados via Web Services (XML / JSON / etc)? Tendo apresentação mista e lógica você fica quase sem esperança, sem alguns hacks muito feio para puxar a apresentação de volta para fora do seu código, antes de injetar algo novo. Se os dados ea apresentação foi separada de fazer essas alterações são quase trivial, crie um script nova visão para o novo formato e solicitações diretas, conforme apropriado.
Separando os dois
Em um aplicativo em desenvolvimento que não é sempre econômica para iniciar a implementação de uma solução MVC completo eo aplicativo precisa ser migrado lentamente - às vezes correndo o código antigo, em paralelo com o novo. É talvez a de que existem massas de lógica (como a instalação de banco de dados de conexão, autenticação, manipulação de cookies, etc) que não estão prontos para moldar a sua configuração quadros escolhidos, portanto, o código antigo e conhecido-a-ser-trabalho podem continuar a ser utilizados até ao momento em que pode ser reescrito / refatorado.
Nota: Usando Zend_Layout Zend_View e como esta é perfeitamente aceitável dentro da paisagem Zend Framework eo quadro foi concebido de tal forma que os componentes individuais podem ser usados sem o resto do quadro. Uma grande vantagem em aplicações em evolução e, provavelmente, uma das principais razões para a sua elevada aceitação em aplicações empresariais.
Front Controller
Abaixo eu crio um controlador de frente - um único arquivo projetado para pegar os pedidos que não correspondem a um arquivo no sistema de arquivos. Isso geralmente é conseguido usando um arquivo htaccess. Tal como o usado no padrão Zend Framework instalar. Dentro do controlador de frente eu vou ser a criação de nosso layout e exibir e mostrar onde as diferentes partes do talão de pedido para ele.
define ('APP_PATH', dirname (__FILE__).'/..'); / / Output buffering Início ob_start (); / / Cria uma instância Zend_View Zend_Layout: startMvc (); $ Layout = Zend_Layout: getMvcInstance (); $ SetLayoutPath> layout (APP_PATH. "Layout / scripts ') -> SetViewSuffix ('phtml') -> SetLayout ('index'); $ View = $ GetView layout-> () - SetScriptPath> (APP_PATH 'view / scripts'). - AddHelperPath> (. APP_PATH '/ library / Zend / View / Helper', 'Zend_View_Helper'); / / Set URL Base - ok * * quase nua, mas você não precisa disso! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ ["HTTP_HOST '] _SERVER); try { / ** * Realiza algum aplicativo de roteamento ... * - Poderia estar usando isso como um controlador de frente e dirigir todos os pedidos * Através deste arquivo (um arquivo fornecido não existe no sistema de arquivos * - Observe o método abaixo é realmente só para demonstração, seria * Horrível com um grande site * / switch ($ ['page'] _GET) { 'Index' caso: «Excepção» caso: PageName $ = $ ['page'] _GET; break; default: PageName $ = false; break; } / / Não Exemplo de uma página que está sendo encontrado ... if ($ pageName === false) { $ ResponseHeader = 'HTTP/1.1 404 página não encontrada'; throw new Exception ("página não encontrada '); } / ** * Adicione dados ao seu objeto de vista aqui * Você pode ter o seu próprio controlador de execução ou algum inclui arquivos * Onde a lógica de negócios é, em parte, separado da lógica da visão * / displayText $ view-> = 'Olá de Lloyd'; ButtonText $ view-> = 'I \' m não ativa '; ("{$ Phtml PAGENAME}.") $ Layout-> content = render $ view->; echo $ render> layout (); } Catch (Exception $ e) { / / Limpe já buffer de conteúdo - que não quer mostrar isso! ob_clean (); if (! isset ($ responseHeader)) { $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error'; } cabeçalho ($ responseHeader); excepção $ view-> = $ e; $ Layout-> content = render $ view-> ('error.phtml'); echo $ render> layout (); }
Em primeiro lugar, iniciar o buffer de saída, ao fazer isso, podemos definir os cabeçalhos em qualquer ponto do pedido e saber que é possível enviá-los. Se uma exceção seja lançada em qualquer fase da execução do código que limpar este buffer e escrever ou conteúdo da mensagem de erro e layout. Isso garante que não entregar parte prestados conteúdo com erros para o usuário final.
A seguir, um exemplo MVC nova Zend_Layout é gerado e que dizer-lhe que a scripts layout tem o phtml extensão, encontram-se em um diretório fora do caminho público, e que o nosso layout padrão é chamado de índice (. Phtml). Desde o layout, nós então extrair o objeto de exibição (em que dedicamos nossos dados para ser apresentado) e aplicar de configuração similar.
Em seguida, configurar o objeto de exibição com uma referência para os ajudantes padrão Zend_View. Ver ajudantes são conjuntos de funcionalidades conveniência adicional. Por exemplo, escrevendo uma bóia em formato monetária, ou a criação de uma tabela com listras de zebra (que pode ser lido sobre aqui ). Ao estender Zend_View_Helper_Abstract e acrescentando sua própria biblioteca, neste ponto é possível utilizar o seu próprio ponto de vista ajudantes aplicação.
O resto do código do aplicativo está agora envolvido em um try catch} {{bloco}. Se alguma coisa jogar uma exceção podemos pegá-lo e exibir uma bela mensagem de erro para o usuário final.
Nossa primeira tarefa dentro do catch try {} {} é para solicitar o nosso percurso, o que o usuário quer ver? Aqui eu implementei um código de demonstração muito simples, onde eu verifico o valor da 'página' get variável. Seu roteamento pode ser muito mais complexa. O roteamento é usado para chamar o que sempre o código precisa ser executado para obter / manipular os dados fornecidos pelo usuário e para dizer ao sistema o que ver (e possivelmente script de layout) para usar.
Em última análise, se o roteador não coincide com qualquer página que define um código de resposta 404 e exibe uma bela página não encontrada mensagem para o usuário final. Aqui, vamos jogar e pegar nossa própria exceção (e uma exceção muito genéricos a isso), mas provavelmente você estaria jogando sua própria exceção de dentro do código do roteador.
Assim que tivermos êxito encaminhado nosso pedido, podemos começar a fazer alguma coisa com o código. Pode ser que você tenha seus próprios instaladores / modelos implementados ou você incluir algum código que já foi separado um pouco. Aqui eu jogo um par de variáveis simples de visualizar o objeto.
Quando isso for concluído, nós simplesmente tornar os pontos de vista com os nossos dados. Se o código lança uma exceção para qualquer razão que esta é preso perto da parte inferior do script. Aqui nós já claro buffer de saída, definir um cabeçalho de resposta de 500, e dizer ao nosso pedido para processar o script 'erro' de vista (que geralmente é uma versão muito simplificada do esquema normal / ver e registra o erro para verificar mais tarde).
Como a visão é processada primeiro e injetado no layout é possível alterar o layout a partir do ponto de vista, e de fato definido extras necessários, por exemplo,
- Título da página
- Metatags
- Scripts (URLs ou código) para a seção <head>
- Adicionar estilos adicionais, etc
Além disso, até é possível mudar todo o layout a partir da exibição usando ...
layout () <php $ this? -> setLayout ('alternativeLayout')>? ... Como e quando necessário.
Finalmente ...
Espero que isto tenha sido uma introdução útil para Zend_Layout e Zend_View e que lhe permitirá começar a aplicar o seu próprio MVC básica e melhorar a maintainibility / extensibilidade do código. Por favor, dê uma olhada no código-fonte de exemplos de uso (consulte o arquivo README para obter instruções).
O código presume que você já tem autoloading de trabalho (ou de ter incluído as aulas obrigatórias). Além disso, eu não recomendaria que você implementar o roteamento de dados ou configuração como acima, isto é muito mais simplificado para demonstração. Para ver o código completo, dê uma olhada no código fonte ligada na parte superior deste artigo.
Zend Framework: 1.10.6


















































Bem escrito e mais informativa, obrigado!