S'agit-il simplement d'un cadre, ou ce cadre incarne-t-il la fierté de la communauté PHP - ses développeurs assidus, pour ainsi dire, un ingrédient clé? Avec une dispersion des configs ... Le sujet de l'amour de notre PL, qui a un bon MVC, donc le Zend Framework est le meilleur framework PHP.
Ici, vous ne trouverez pas la réponse à cette question, mais vous en apprendrez plus sur ServiceManager et ModuleManager.

Avertissement
- Ce matériel est basé sur ce que je cherchais dans Zend Framework 2, à certains endroits, même des mentions de la version 1. apparaissent. * Je ne pense pas que cela deviendra un problème lors de la comparaison avec d'autres versions, car les points fondamentaux sont pris en compte et il est peu probable qu'ils changent globalement.
- Dans le raisonnement et les traductions (ainsi qu'au paragraphe 1), il peut y avoir des erreurs grossières, à la fois les miennes et les sources originales. Tous recevront des liens, et votre propre travail sera accompagné d'une note [la mienne] .
- Il s'adresse à ceux qui google et, comme moi, se sont confondus. Il n'y aura pas de déploiement de blogs, d'explications et d'interactivité. Mais il y aura deux photos et un minou.
Table des matières
- Termes
- Cadre de l'appareil
- Structure générale et relations
- Plugins
- Visualisation
- Les communications
- Diagramme schématique
- De l'auteur
- Bonus
Termes
Source , un peu [le mien] .
- Application - le produit final, le site;
- Un module est un «bloc» fonctionnel complété d'une application, dont le code peut être composé de modèles, de représentations, de contrôleurs. Le module étend les fonctionnalités d'une application Web et ne peut fonctionner que "à l'intérieur"; Les modules sont enregistrés dans
application.config.php
dans la section modules
- ModuleManager - un conteneur pour manipuler des modules;
- Service - «mécanisme» dans le module, pour les manipulations entre modèles, contrôleurs, types, etc. Les services sont enregistrés dans
module.config.php
dans la section service_manager
. - ServiceManager - un conteneur pour manipuler des services.
- ControllerManager - fonctionne avec les services et les usines pour charger les contrôleurs (
\Zend\ServiceManager\AbstractFactoryInterface
ou \Zend\ServiceManager\ServiceManager
). quai - EventManager - un composant qui regroupe les gestionnaires d'événements (Listener) pour un ou plusieurs événements nommés (Event), et lance également le traitement de ces événements.
- Un plugin est une classe qui étend les fonctionnalités de tous les contrôleurs d'une manière ou d'une autre.
Cadre de l'appareil
Structure générale et relations
Source
Lorsque Zend\Mvc\Application
, l'objet Zend\ServiceManager\ServiceManager
est créé et configuré via Zend\Mvc\Service\ServiceManagerConfig
. ServiceManagerConfig
obtient la configuration à partir de config/application.config.php
(ou d'une autre configuration d'application transmise à Application
lors de sa création). De tous les services et usines représentés dans l'espace de noms Zend\Mvc\Service
, ServiceManagerConfig
n'est responsable que de trois: SharedEventManager
, EventManager
et ModuleManager
.
Après cela, Application
récupère le ModuleManager
. À ce stade, le ModuleManager
via le ServiceManager
configure les services et les usines fournis dans Zend\Mvc\Service\ServiceListenerFactory
. Cette approche nous permet de simplifier la configuration de l'application principale et de fournir au développeur la possibilité de configurer diverses parties du système MVC à partir de modules, en remplaçant toute configuration par défaut dans les services de ces MVC.
ModuleManager
, exprimé dans Zend\Mvc\Service\ModuleManagerFactory
. C'est peut-être l'usine la plus complexe de la pile MVC. ModuleManager
s'attend à ce que le service ApplicationConfig
soit déployé ( Di ) avec les clés module_listener_options
et modules
.
Il crée une instance de Zend\ModuleManager\Listener\DefaultListenerAggregate
utilisant les module_listener_options
extraits. Il vérifie ensuite s'il existe un service nommé ServiceListener
; sinon, il utilise une fabrique nommée Zend\Mvc\Service\ServiceListenerFactory
. De nombreux services d'écoute seront ajoutés au ServiceListener
, tels que les écouteurs des getServiceConfig
, getControllerConfig
, getControllerPluginConfig
, getViewHelperConfig
.
ModuleManager
récupère ensuite le service ModuleManager
et attache les écouteurs ci-dessus. Il crée une instance de Zend\ModuleManager\ModuleEvent
en définissant le paramètre "ServiceManager" sur l'objet gestionnaire de services. Enfin, il crée une instance de Zend\ModuleManager\ModuleManager
et implémente EventManager
et ModuleEvent
.
[le mien] Le cas où le code est plus clair:
<?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
Source
L'architecture du contrôleur comprend un système de plug-in qui vous permet d'ajouter votre propre code, qui sera appelé lorsque certains événements se produisent pendant la durée de vie du contrôleur. Le contrôleur frontal utilise un courtier de plugins comme registre de plugins utilisateur, le courtier de plugins fournit également un appel de méthode d'événement dans chaque plugin enregistré via le contrôleur frontal.
Les méthodes d'événement sont définies dans la classe abstraite Zend_Controller_Plugin_Abstract
, dont tous les plugins utilisateurs doivent hériter
Visualisation
[le mien]
- Il est lu de haut en bas, sauf indication contraire par des flèches.
- Les flèches indiquent ce qui est inclus.
- Des lignes fines sans flèches indiquent ce qui est connecté.
- Des lignes épaisses sans flèches indiquent les commandes.
Les communications

Schéma

De l'auteur
Le lecteur attentif a noté que l'article commence par un lien vers le grille-pain, où une question est posée sur les différences entre ServiceManager et ModuleManager, et le texte de l'article commence par eux. Coïncidence? Je ne pense pas. Le fait est que Habr a été le premier endroit à partir duquel j'ai commencé à me familiariser avec les bases du cadre et la publication a semé la confusion, où un blog a été recréé à partir de la documentation avec des commentaires de l'auteur de l'article. C'est le manque de description de ModuleManager qui m'a poussé à un mauvais raisonnement (que les modules sont enregistrés dans le ServiceManager) et cela a conduit à la rédaction de cet article.
Liens utiles
Je ne veux pas m'engager dans le copier-coller et développer 6 parties sur un sujet, donc je joins une liste de mes signets sur ZF avec des notes:
Attention spoiler!Le blog
Dans trois articles de Habr
- https://habr.com/post/192522/
- Traduction gratuite de documentation pour développer un blog simple sur ZendSkeletonApplication. Il parle de configs, ServiceManager (ou ModuleManager, je ne comprends toujours pas) et de la connexion de bibliothèques tierces.
Documentation originale du blog
Eventmanager
Examen principal
Analyse détaillée
Servicemanager
Démarrage rapide
Analyse détaillée
Modulemanager
La documentation
J'espère que la brève excursion n'a pas été trop longue et a été utile. Bien entendu, les modifications, suggestions, critiques et autres actions autorisées par les règles Habr et les lois en vigueur de la Fédération de Russie de votre part sont acceptées.
Bonus que nous méritons:
Kitty
(= ^ ・ Ω ・ ^ =)