Une brève visite des points forts du Framework Zend

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.


Fous les fous!


Avertissement


  1. 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.
  2. 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] .
  3. 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
    • Liens utiles
  • 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' ); //        $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


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


la communication


Schéma


régime


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


(= ^ ・ Ω ・ ^ =)

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


All Articles