Eine kurze Tour durch die Highlights des Zend Frameworks

Ist es nur ein Framework oder verkörpert dieses Framework den Stolz der PHP-Community - ihre fleißigen Entwickler sozusagen eine Schlüsselzutat? Mit einer Streuung von Konfigurationen ... Das Thema der Liebe unseres PL, der eine gute MVC hat, so ist das Zend Framework das beste PHP-Framework.


Hier finden Sie keine Antwort auf diese Frage, aber Sie erfahren mehr über ServiceManager und ModuleManager.


Narren laufen lassen!


Warnung


  1. Dieses Material basiert auf dem, wonach ich in Zend Framework 2 gesucht habe, an einigen Stellen erscheinen sogar Erwähnungen von Version 1. *. Ich denke nicht, dass dies im Vergleich zu anderen Versionen zu einem Problem werden wird, da die grundlegenden Punkte berücksichtigt werden und es unwahrscheinlich ist, dass sie sich global ändern.
  2. In Begründungen und Übersetzungen (sowie in Absatz 1) kann es zu groben Fehlern kommen, sowohl bei meinen als auch bei den Originalquellen. Alle erhalten Links, und Ihre eigene Arbeit wird mit einer Notiz [meiner] versehen .
  3. Es richtet sich an diejenigen, die googeln und wie ich verwirrt wurden. Es werden keine Blogs, Erklärungen und Interaktivität bereitgestellt. Aber es wird zwei Bilder und ein Kätzchen geben.

Inhalt


  • Bedingungen
  • Geräte-Framework
    • Allgemeine Struktur und Beziehungen
    • Plugins
  • Visualisierung
    • Kommunikation
    • Schematische Darstellung
  • Vom Autor
    • Nützliche Links
  • Bonus

Bedingungen


Quelle , ein wenig [meins] .


  • Anwendung - das Endprodukt, Standort;
  • Ein Modul ist ein funktional abgeschlossener „Block“ einer Anwendung, dessen Code aus Modellen, Darstellungen und Steuerungen bestehen kann. Das Modul erweitert die Funktionalität einer Webanwendung und kann nur "innerhalb" funktionieren. Module werden in application.config.php im Abschnitt Module registriert
  • ModuleManager - ein Container zum Bearbeiten von Modulen;
  • Service - "Mechanismus" im Modul für Manipulationen zwischen Modellen, Steuerungen, Typen usw. Dienste werden in module.config.php im Abschnitt module.config.php service_manager .
  • ServiceManager - ein Container zum Bearbeiten von Diensten.
  • ControllerManager - arbeitet mit Diensten und Fabriken zum Laden von Controllern ( \Zend\ServiceManager\AbstractFactoryInterface oder \Zend\ServiceManager\ServiceManager ). Dock
  • EventManager - eine Komponente, die Ereignishandler (Listener) für ein oder mehrere benannte Ereignisse (Ereignis) aggregiert und auch die Verarbeitung dieser Ereignisse initiiert.
  • Ein Plugin ist eine Klasse, die die Funktionalität aller Controller in irgendeiner Weise erweitert.

Geräte-Framework


Allgemeine Struktur und Beziehungen


Quelle


Wenn Zend\Mvc\Application , wird das Objekt Zend\ServiceManager\ServiceManager über Zend\Mvc\Service\ServiceManagerConfig erstellt und konfiguriert. ServiceManagerConfig ruft die Konfiguration von config/application.config.php (oder einer anderen Anwendungskonfiguration, die beim Erstellen an Application wird). Von allen im Namespace Zend\Mvc\Service dargestellten Diensten und Fabriken ist ServiceManagerConfig nur für drei verantwortlich: SharedEventManager , EventManager und ModuleManager .


Danach ModuleManager Application den ModuleManager . Zu diesem Zeitpunkt konfiguriert der ModuleManager über den ServiceManager die in Zend\Mvc\Service\ServiceListenerFactory bereitgestellten Dienste und Fabriken. Dieser Ansatz ermöglicht es uns, die Konfiguration der Hauptanwendung zu vereinfachen und dem Entwickler die Möglichkeit zu geben, verschiedene Teile des MVC-Systems aus Modulen heraus zu konfigurieren, wobei alle Standardkonfigurationen in den Diensten dieser MVCs überschrieben werden.




ModuleManager , ausgedrückt in Zend\Mvc\Service\ModuleManagerFactory . Dies ist möglicherweise die komplexeste Fabrik im MVC-Stack. ModuleManager erwartet, dass der ApplicationConfig Dienst mit den Schlüsseln module_listener_options und modules bereitgestellt wird ( Di ).


Es erstellt eine Instanz von Zend\ModuleManager\Listener\DefaultListenerAggregate Verwendung der extrahierten module_listener_options . Anschließend wird überprüft, ob ein Dienst mit dem Namen Zend\Mvc\Service\ServiceListenerFactory wird eine Factory mit dem Namen Zend\Mvc\Service\ServiceListenerFactory . Dem getServiceConfig viele Listener-Services hinzugefügt, z. B. die Listener des getServiceConfig , getControllerConfig , getControllerPluginConfig und getViewHelperConfig .


ModuleManager dann den ModuleManager Dienst ab und hängt die oben genannten Listener an. Es erstellt eine Instanz von Zend\ModuleManager\ModuleEvent indem der Parameter "ServiceManager" auf das Service Manager-Objekt gesetzt wird. Schließlich erstellt er eine Instanz von Zend\ModuleManager\ModuleManager und implementiert EventManager und ModuleEvent .


[meins] Der Fall, wenn der Code klarer ist:


 <?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


Quelle


Die Controller-Architektur enthält ein Plug-In-System, mit dem Sie Ihren eigenen Code hinzufügen können, der aufgerufen wird, wenn bestimmte Ereignisse während der Lebensdauer des Controllers auftreten. Der Front-Controller verwendet einen Plugin-Broker als Registrierung für Benutzer-Plugins. Der Plugin-Broker bietet auch einen Aufruf von Ereignismethoden in jedem über den Front-Controller registrierten Plugin.


Ereignismethoden sind in der abstrakten Klasse Zend_Controller_Plugin_Abstract , von der alle Benutzer-Plugins erben müssen


Visualisierung


[meins]


  • Es wird von oben nach unten gelesen, sofern nicht durch Pfeile anders angegeben.
  • Pfeillinien zeigen an, was enthalten ist.
  • Dünne Linien ohne Pfeile zeigen an, was verbunden ist.
  • Dicke Linien ohne Pfeile zeigen an, welche Steuerelemente verwendet werden.

Kommunikation


Kommunikation


Schema


Schema


Vom Autor


Der aufmerksame Leser stellte fest, dass der Artikel mit einem Link zum Toaster beginnt, in dem eine Frage zu den Unterschieden zwischen ServiceManager und ModuleManager gestellt wird und der Text des Artikels mit diesen beginnt. Zufall? Ich glaube nicht. Tatsache ist, dass Habr der erste Ort war, an dem ich anfing, mich mit den Grundlagen des Frameworks vertraut zu machen, und die Veröffentlichung Verwirrung stiftete, wo ein Blog aus der Dokumentation mit Kommentaren des Autors des Artikels neu erstellt wurde. Es war das Fehlen einer Beschreibung von ModuleManager, das mich zu der falschen Argumentation führte (dass Module im ServiceManager registriert sind), und dies führte zum Schreiben dieses Artikels.


Nützliche Links


Ich möchte mich nicht mit Kopieren und Einfügen beschäftigen und 6 Teile zu einem Thema erweitern. Daher füge ich eine Liste meiner Lesezeichen auf ZF mit folgenden Notizen bei:


Achtung Spoiler!

Der Blog


In drei Artikeln von Habr


  • https://habr.com/post/192522/
  • Kostenlose Übersetzung der Dokumentation zur Entwicklung eines einfachen Blogs auf ZendSkeletonApplication. Es geht um Konfigurationen, ServiceManager (oder ModuleManager, den ich immer noch nicht verstehe) und das Verbinden von Bibliotheken von Drittanbietern.

Original Blog Dokumentation



Eventmanager


Primäre Überprüfung



Detaillierte Analyse



Servicemanager


Schnellstart



Detaillierte Analyse



Modulemanager


Die Dokumentation



Ich hoffe der kurze Ausflug war nicht zu lang und hat sich bewährt. Natürlich werden Änderungen, Vorschläge, Kritik und andere Maßnahmen, die nach den Habr-Regeln und den geltenden Gesetzen der Russischen Föderation von Ihrer Seite zulässig sind, akzeptiert.




Bonus, den wir verdienen:


Kitty


(= ^ ・ Ω ・ ^ =)

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


All Articles