Magento 2 Object Manager — це клас PHP, відповідальний за створення та отримання об’єктів у Magento 2. Він також керує створеннями фабрик та проксі.

Як це працює?

Щоб отримати екземпляр object manager (наприклад дістати magento 2 object manager у phtml), використовуйте наступний код:

<?php 
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

Щоб додати object manager до конструктора:

/
     * @var \Magento\Framework\ObjectManagerInterface
     */
    private $objectManager;

    /
     * @param \Magento\Framework\ObjectManagerInterface $objectmanager
     */
    public function __construct(
        \Magento\Framework\ObjectManagerInterface $objectmanager
    ) {
        $this->objectManager = $objectmanager;
    }

Використовуючи ObjectManager, ви можете отримати синглтон-об'єкт — singleton object (метод "get") класу PHP або створити новий (метод "create").

Приклад:

<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
/* Create a new product object */
$product = $objectManager->create(\Magento\Catalog\Model\Product::class);
/* Get a request object singleton */
$request = $objectManager->get(\Magento\Framework\App\RequestInterface::class);

Налаштування object manager

Object manager налаштовується у файлі di.xml, який вказує йому, як працювати з dependency injections. Оскільки інтерфейс оголошено у конструкторі класів, файл di.xml також визначає бажаний клас реалізації (preferred implementation class), який менеджер об’єктів генерував для інтерфейсу.

Окрім цього, файл di.xml вказує, чи буде object manager розглядати об’єкт як singleton чи створюватиме об’єкти для кожного запиту.

Винятки

Увага !!! Вам слід уникати прямого використання ObjectManager, як у попередньому прикладі у вашому коді, оскільки він приховує реальні залежності класу.

Ви можете використовувати Object Manager лише:

- для тестування вашого коду
- для фабрик та класів проксі
- для змін зворотної сумісності в конструкторі класу PHP
- у статичних магічних методах, наприклад: __wakeup, serialize, тощо.