É 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.

Advertência
- 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.
- 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] .
- 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
- 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' );
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

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
(= ^ ・ Ω ・ ^ =)