Um breve tour pelos destaques do Zend Framework

É apenas uma estrutura, ou essa estrutura incorpora o orgulho da comunidade PHP - seus desenvolvedores esforçados, por assim dizer, um ingrediente-chave? Com uma dispersão de configurações ... O assunto do amor do nosso PL, que possui um bom MVC, portanto o Zend Framework é o melhor framework PHP.


Aqui você não encontrará a resposta para esta pergunta, mas aprenderá sobre o ServiceManager e o ModuleManager.


Corra tolos!


Advertência


  1. Este material é baseado no que eu estava procurando no Zend Framework 2, em alguns lugares até menciona a versão 1. aparece. *. Eu não acho que isso se tornará um problema quando comparado com outras versões, uma vez que os pontos fundamentais são considerados e é improvável que mudem globalmente.
  2. No raciocínio e nas traduções (assim como no parágrafo 1), pode haver erros graves, tanto os meus quanto as fontes originais. Todos receberão links, e seu próprio trabalho estará com uma nota [minha] .
  3. Destina-se a quem google e, como eu, ficou confuso. Não haverá implantação de blogs, explicações e interatividade. Mas haverá duas fotos e um gatinho.

Conteúdo


  • Termos
  • Estrutura do dispositivo
    • Estrutura e relações gerais
    • Plugins
  • Visualização
    • Comunicações
    • Diagrama esquemático
  • Do autor
    • Links úteis
  • Bônus

Termos


Fonte , um pouco [minha] .


  • Aplicação - o produto final, site;
  • Um módulo é um "bloco" funcionalmente concluído de um aplicativo, cujo código pode consistir em modelos, visualizações, controladores. O módulo amplia a funcionalidade de um aplicativo da web e só pode funcionar "dentro" dele; Os módulos são registrados em application.config.php na seção de modules
  • ModuleManager - um contêiner para manipulação de módulos;
  • Serviço - “mecanismo” no módulo, para manipulações entre modelos, controladores, tipos, etc. Os serviços são registrados em module.config.php na seção service_manager .
  • ServiceManager - um contêiner para manipulação de serviços.
  • ControllerManager - trabalha com serviços e fábricas para carregar controladores ( \Zend\ServiceManager\AbstractFactoryInterface ou \Zend\ServiceManager\ServiceManager ). doca
  • EventManager - um componente que agrega manipuladores de eventos (Listener) para um ou mais eventos nomeados (Event) e também inicia o processamento desses eventos.
  • Um plug - in é uma classe que estende a funcionalidade de todos os controladores de alguma forma.

Estrutura do dispositivo


Estrutura e relações gerais


Fonte


Quando Zend\Mvc\Application , o objeto Zend\ServiceManager\ServiceManager é criado e configurado através de Zend\Mvc\Service\ServiceManagerConfig . ServiceManagerConfig obtém a configuração de config/application.config.php (ou alguma outra configuração de aplicativo que é passada para o Application quando é criada). De todos os serviços e fábricas representados no espaço Zend\Mvc\Service nome Zend\Mvc\Service , o ServiceManagerConfig é responsável por apenas três: SharedEventManager , EventManager e ModuleManager .


Depois disso, o Application recupera o ModuleManager . Nesse momento, o ModuleManager por meio do ServiceManager configura os serviços e fábricas fornecidos em Zend\Mvc\Service\ServiceListenerFactory . Essa abordagem nos permite simplificar a configuração do aplicativo principal e fornecer ao desenvolvedor a oportunidade de configurar várias partes do sistema MVC a partir de módulos, substituindo qualquer configuração padrão nos serviços desses MVCs.




ModuleManager , expresso em Zend\Mvc\Service\ModuleManagerFactory . Esta é talvez a fábrica mais complexa da pilha MVC. ModuleManager espera que o serviço ApplicationConfig seja implantado ( Di ) com as chaves module_listener_options e modules .


Ele cria uma instância do Zend\ModuleManager\Listener\DefaultListenerAggregate usando o module_listener_options extraído. Em seguida, verifica se existe um serviço chamado ServiceListener ; caso contrário, ele usa uma fábrica chamada Zend\Mvc\Service\ServiceListenerFactory . Muitos serviços de ouvinte serão adicionados ao ServiceListener , como os ouvintes do getServiceConfig , getControllerConfig , getControllerPluginConfig , getViewHelperConfig .


ModuleManager recupera o serviço ModuleManager e conecta os ouvintes acima. Ele cria uma instância do Zend\ModuleManager\ModuleEvent configurando o parâmetro "ServiceManager" para o objeto do gerenciador de serviços. Por fim, ele cria uma instância do Zend\ModuleManager\ModuleManager e implementa o EventManager e o ModuleEvent .


[mine] O caso em que o código é mais claro:


 <?php namespace Zend\Mvc\Service; use Zend\ModuleManager\Listener\DefaultListenerAggregate; use Zend\ModuleManager\Listener\ListenerOptions; use Zend\ModuleManager\ModuleEvent; use Zend\ModuleManager\ModuleManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class ModuleManagerFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { if (!$serviceLocator->has('ServiceListener')) { $serviceLocator->setFactory('ServiceListener', 'Zend\Mvc\Service\ServiceListenerFactory'); } $configuration = $serviceLocator->get('ApplicationConfig'); $listenerOptions = new ListenerOptions($configuration['module_listener_options']); $defaultListeners = new DefaultListenerAggregate($listenerOptions); $serviceListener = $serviceLocator->get('ServiceListener'); $serviceListener->addServiceManager( $serviceLocator, 'service_manager', 'Zend\ModuleManager\Feature\ServiceProviderInterface', 'getServiceConfig' ); //        $events = $serviceLocator->get('EventManager'); $events->attach($defaultListeners); $events->attach($serviceListener); $moduleEvent = new ModuleEvent; $moduleEvent->setParam('ServiceManager', $serviceLocator); $moduleManager = new ModuleManager($configuration['modules'], $events); $moduleManager->setEvent($moduleEvent); return $moduleManager; } } 

Plugins


Fonte


A arquitetura do controlador inclui um sistema de plug-in que permite adicionar seu próprio código, que será chamado quando certos eventos ocorrerem durante a vida útil do controlador. O controlador frontal usa um intermediário de plug-in como um registro de plug-ins de usuário; o intermediário de plug-in também fornece uma chamada de métodos de eventos em cada plug-in registrado através do controlador frontal.


Os métodos de evento são definidos na classe abstrata Zend_Controller_Plugin_Abstract , da qual todos os plugins de usuário devem herdar


Visualização


[meu]


  • É lido de cima para baixo, a menos que especificado de outra forma pelas setas.
  • Linhas de seta indicam o que está incluído.
  • Linhas finas sem setas indicam o que está conectado.
  • Linhas grossas sem setas indicam quais controles.

Comunicações


comunicação


Esquema


esquema


Do autor


O leitor atento observou que o artigo começa com um link para a Torradeira, onde é feita uma pergunta sobre as diferenças entre o ServiceManager e o ModuleManager, e o texto do artigo começa com eles. Coincidência? Eu acho que não. O fato é que Habr foi o primeiro local a partir do qual comecei a me familiarizar com o básico da estrutura e a publicação introduziu confusão, onde um blog foi recriado da documentação com comentários do autor do artigo. Foi a falta de uma descrição do ModuleManager que me levou ao raciocínio errado (que os módulos estão registrados no ServiceManager) e isso levou à redação deste artigo.


Links úteis


Não quero me envolver em copiar e colar seis partes em um tópico, por isso estou anexando uma lista dos meus favoritos na ZF com notas:


Cuidado spoiler!

O blog


Em três artigos de Habr


  • https://habr.com/post/192522/
  • Tradução gratuita da documentação para o desenvolvimento de um blog simples no ZendSkeletonApplication. Ele fala sobre configurações, ServiceManager (ou ModuleManager, eu ainda não entendo) e conexão de bibliotecas de terceiros.

Documentação original do blog



Eventmanager


Revisão primária



Análise detalhada



Servicemanager


Início rápido



Análise detalhada



Modulemanager


A documentação



Espero que a breve excursão não tenha sido muito longa e tenha sido útil. Obviamente, edições, sugestões, críticas e outras ações permitidas pelas regras da Habr e pelas leis atuais da Federação Russa de sua parte são aceitas.




Bônus que merecemos:


Kitty


(= ^ ・ Ω ・ ^ =)

Source: https://habr.com/ru/post/pt426303/


All Articles