ObjectManager no Magento 2

ObjectManager pode ser chamado de um dos principais conceitos subjacentes à construção do Magento2, e é completamente novo quando comparado ao Magento1. Se nos lembrarmos do Magento1, então, lá, para criar os objetos com os quais precisamos trabalhar, usamos a classe Mage, que fornecia métodos estáticos para a criação de diferentes tipos de objetos - sejam modelos, modelos de recursos, auxiliares, ou para a criação de objetos que queríamos ter em uma única instância (método Mage :: getSingleton). Ao criar o Magento2, a equipe de desenvolvimento abandonou essa ideia e implementou o princípio de injeção de dependência e contratos de serviço (ServiceContracts). Isso é o que tornou o Magento2 tão flexível, facilmente personalizável e testável. Além disso, a presença da funcionalidade construída em torno do ObjectManager torna possível ter todas as funcionalidades de customização do comportamento do sistema,que podemos personalizar por meio do arquivo de configuração di.xml.



Se olharmos globalmente para a funcionalidade que o ObjectManager implementa, então podemos dizer que é um tipo de implementação do contêiner DI, que é representado no mundo do PHP como PSR-11, embora o próprio ObjectManager não implemente diretamente Psr \ Container \ ContainerInterface (e não tenha um , que Psr \ Container \ ContainerInterface assume). É um recurso centralizado para criar e recuperar objetos. Ter uma classe centralizada para gerar os objetos necessários tem as seguintes vantagens.



  • Não precisamos inicializar e gerenciar objetos manualmente (também precisamos dizer que o ObjectManager é usado para gerar objetos dentro das classes Factory e Proxy, que são criadas por meio da geração de código)

  • é possível através das configurações prescrever qual implementação de alguma interface a classe deve receber e usar o princípio de inversão de dependência

  • o sistema fica mais fácil de testar
  • é possível usar classes de proxy e classes de fábrica (fábrica)
  • Economizando recursos do servidor, uma vez que alguns dos objetos não são reinicializados, mas são retirados do cache de objetos já criados (configuração compartilhada)


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