ObjectManager en Magento 2

ObjectManager se puede llamar uno de los conceptos básicos que subyacen a la construcción de Magento2, y es completamente nuevo en comparación con Magento1. Si recordamos Magento1, entonces, allí, para crear los objetos con los que necesitamos trabajar, usamos la clase Mage, que proporcionó métodos estáticos para crear diferentes tipos de objetos, ya sean modelos, modelos de recursos, ayudantes o para crear objetos que queríamos tener. en una sola instancia (método Mage :: getSingleton). Al crear Magento2, el equipo de desarrollo abandonó esta idea e implementó el principio de inyección de dependencia y contratos de servicio (ServiceContracts). Esto es lo que hizo que Magento2 fuera tan flexible, fácilmente personalizable y comprobable. Además, la presencia de la funcionalidad construida alrededor del ObjectManager hace posible tener toda la funcionalidad de personalizar el comportamiento del sistema,que podemos personalizar a través del archivo de configuración di.xml.



Si miramos globalmente la funcionalidad que implementa ObjectManager, entonces podemos decir que es una especie de implementación del contenedor DI, que se representa en el mundo PHP como PSR-11, aunque el ObjectManager en sí mismo no implementa directamente Psr \ Container \ ContainerInterface (y no tiene un has , que asume Psr \ Container \ ContainerInterface). Es una instalación centralizada para crear y recuperar objetos. Tener una clase tan centralizada para generar los objetos requeridos tiene las siguientes ventajas.



  • No necesitamos inicializar y administrar objetos manualmente (también debemos decir que ObjectManager se usa para generar objetos dentro de las clases Factory y Proxy, que se crean a través de la generación de código)

  • es posible a través de la configuración prescribir qué implementación de alguna interfaz debe recibir la clase y usar el principio de inversión de dependencia

  • el sistema se vuelve más fácil de probar
  • es posible usar clases Proxy y clases de fábrica (Factory)
  • Ahorro de recursos del servidor, ya que algunos de los objetos no se reinicializan, sino que se toman de la caché de objetos ya creados (configuración compartida)


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