ObjectManager bisa disebut sebagai salah satu konsep dasar yang mendasari konstruksi Magento2, dan benar-benar baru jika dibandingkan dengan Magento1. Jika kita mengingat Magento1, maka, di sana, untuk membuat objek yang perlu kita kerjakan, kita menggunakan kelas Mage, yang menyediakan metode statis untuk membuat berbagai jenis objek - baik itu model, model sumber daya, pembantu, atau untuk membuat objek yang ingin kita miliki. dalam satu instance (metode Mage :: getSingleton). Saat membuat Magento2, tim pengembangan mengabaikan ide ini dan menerapkan prinsip injeksi ketergantungan dan kontrak layanan (ServiceContracts). Inilah yang membuat Magento2 begitu fleksibel, mudah disesuaikan, dan dapat diuji. Selain itu, kehadiran fungsionalitas yang dibangun di sekitar ObjectManager memungkinkan untuk memiliki semua fungsionalitas menyesuaikan perilaku sistem,yang dapat kita sesuaikan melalui file konfigurasi di.xml.
Jika Anda melihat secara global pada fungsionalitas yang diimplementasikan ObjectManager, maka kita dapat mengatakan bahwa itu adalah semacam implementasi kontainer DI, yang direpresentasikan di dunia PHP sebagai PSR-11, meskipun ObjectManager itu sendiri tidak secara langsung mengimplementasikan Psr \ Container \ ContainerInterface (dan tidak memiliki has , yang diasumsikan Psr \ Container \ ContainerInterface). Ini adalah fasilitas terpusat untuk membuat dan mengambil objek. Memiliki kelas terpusat untuk menghasilkan objek yang dibutuhkan memiliki keuntungan sebagai berikut.
- Kita tidak perlu menginisialisasi dan mengelola objek secara manual (kita juga perlu mengatakan bahwa ObjectManager digunakan untuk menghasilkan objek di dalam kelas Factory dan Proxy, yang dibuat melalui pembuatan kode)
- dimungkinkan untuk meresepkan melalui pengaturan implementasi antarmuka tertentu yang harus diterima kelas dan menggunakan prinsip inversi ketergantungan
- sistem menjadi lebih mudah untuk diuji
- dimungkinkan untuk menggunakan kelas Proxy dan kelas pabrik (Pabrik)
- Menyimpan sumber daya server, karena beberapa objek tidak diinisialisasi ulang, tetapi diambil dari cache yang sudah dibuat objek (pengaturan bersama)
, , 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.