ObjectManagerは、Magento2の構築の基礎となる主要な概念の1つと呼ぶことができ、Magento1と比較するとまったく新しいものです。 Magento1を覚えている場合は、そこで、作業する必要のあるオブジェクトを作成するために、Mageクラスを使用しました。これは、モデル、リソースモデル、ヘルパー、または必要なオブジェクトを作成するためのさまざまなタイプのオブジェクトを作成するための静的メソッドを提供します。単一のインスタンスで(Mage :: getSingletonメソッド)。 Magento2を作成するとき、開発チームはこのアイデアを放棄し、依存関係の注入とサービス契約(ServiceContracts)の原則を実装しました。これが、Magento2を非常に柔軟で、簡単にカスタマイズでき、テストできるようにした理由です。また、ObjectManagerを中心に構築された機能の存在により、システムの動作をカスタマイズするすべての機能を使用できます。これは、di.xml構成ファイルを介してカスタマイズできます。
ObjectManagerが実装する機能をグローバルに見ると、これはDIコンテナの一種の実装であると言えます。これは、PHPの世界ではPSR-11として表されますが、ObjectManager自体はPsr \ Container \ ContainerInterfaceを直接実装していません( 、Psr \ Container \ ContainerInterfaceが想定します)。これは、オブジェクトを作成および取得するための一元化された機能です。必要なオブジェクトを生成するためのこのような一元化されたクラスを持つことには、次の利点があります。
- オブジェクトを手動で初期化して管理する必要はありません(ObjectManagerは、コード生成によって作成されるFactoryクラスとProxyクラス内のオブジェクトを生成するために使用されることも言う必要があります)
- クラスが受け取る特定のインターフェイスの実装を設定を通じて規定し、依存関係の反転の原則を使用することができます。
- システムのテストが容易になります
- プロキシクラスとファクトリクラス(ファクトリ)を使用することができます
- 一部のオブジェクトは再初期化されないが、すでに作成されたオブジェクトのキャッシュから取得されるため、サーバーリソースを節約します(共有設定)
, , 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.