ObjectManager in Magento 2

ObjectManager kann als eines der Grundkonzepte bezeichnet werden, die der Konstruktion von Magento2 zugrunde liegen, und ist im Vergleich zu Magento1 völlig neu. Wenn wir uns an Magento1 erinnern, haben wir dort zum Erstellen der Objekte, die wir bearbeiten müssen, die Mage-Klasse verwendet, die statische Methoden zum Erstellen verschiedener Objekttypen bereitstellte - sei es Modelle, Ressourcenmodelle, Helfer oder zum Erstellen von Objekten, die wir haben wollten in einer einzelnen Instanz (Mage :: getSingleton-Methode). Bei der Erstellung von Magento2 gab das Entwicklungsteam diese Idee auf und implementierte das Prinzip der Abhängigkeitsinjektion und der Serviceverträge (ServiceContracts). Dies hat Magento2 so flexibel, leicht anpassbar und testbar gemacht. Das Vorhandensein der auf dem ObjectManager basierenden Funktionalität ermöglicht es außerdem, alle Funktionen zum Anpassen des Systemverhaltens zu nutzen.die wir über die Konfigurationsdatei di.xml anpassen können.



Wenn wir uns die vom ObjectManager implementierte Funktionalität global ansehen, können wir sagen, dass es sich um eine Art Implementierung des DI-Containers handelt, der in der PHP-Welt als PSR-11 dargestellt wird, obwohl der ObjectManager selbst Psr \ Container \ ContainerInterface nicht direkt implementiert (und kein has hat) , was Psr \ Container \ ContainerInterface annimmt). Es ist eine zentrale Einrichtung zum Erstellen und Abrufen von Objekten. Eine solche zentralisierte Klasse zum Generieren der erforderlichen Objekte hat die folgenden Vorteile.



  • Wir müssen Objekte nicht manuell initialisieren und verwalten (wir müssen auch sagen, dass der ObjectManager zum Generieren von Objekten innerhalb der Factory- und Proxy-Klassen verwendet wird, die durch Codegenerierung erstellt werden).

  • Über die Einstellungen kann festgelegt werden, welche Implementierung einer Schnittstelle die Klasse erhalten soll, und das Prinzip der Abhängigkeitsinversion verwendet werden

  • Das System wird einfacher zu testen
  • Es ist möglich, Proxy-Klassen und Factory-Klassen (Factory) zu verwenden.
  • Speichern von Serverressourcen, da einige der Objekte nicht neu initialisiert werden, sondern aus dem Cache bereits erstellter Objekte entnommen werden (gemeinsame Einstellung)


, , Magento\Framework\ObjectManager\ObjectManager protected $_sharedInstances = []. , 1 () — , (namespace). ObjectManager ?



, ObjectManager - shared=true. — shared xml-. (observer).





<observer name="legacy_model_save"
          instance="Magento\Framework\EntityManager\Observer\BeforeEntitySave" shared="false"/>


. , type. , true -, .



ObjectManager . , Http.



index.php, , Magento\Framework\App\Bootstrap

create, 2 :



  • — $_SERVER +


create createObjectManagerFactory, Magento\Framework\App\ObjectManagerFactory Bootstrap, , Magento\Framework\App\ObjectManager. , . Magento\Framework\App\Http::launch ObjectManager  Magento\Framework\App\ObjectManager::configure. di.xml. ObjectManager preference, type, virtualType. ObjectManager — Magento\Framework\ObjectManager\Config\Config, Magento\Framework\ObjectManager\ConfigInterface. di.xml : preference, type, virtualType . preference’ ObjectManager’ .



2 ObjectManager: create get. , create ( , Factory method), get , , .



— (, Magento\Framework\ObjectManager\FactoryInterface), , Magento\Framework\ObjectManager\Factory. php . Magento\Framework\ObjectManager\Factory\AbstractFactory::createObject, . ObjectManager , , .



Magento\Framework\ObjectManager\Code\Generator. , , , Factory Proxy , (Proxy di.xml) . Proxy-, , , proxy-, , ( Proxy). , . Factory factory method, create, ObjectManager Magento\Framework\App\ObjectManager::create.




All Articles