Як створити екземпляр моделі в Magento 2
В Magento 1-й версії ми легко створювали екземпляр моделі, використовуючи методи Mage::getModel
і Mage::getSingleton
. Але в Magento 2 ця процедура трохи інша.
В Magento 2 ми можемо створити екземпляр моделі за допомогою диспетчера об’єктів (Object Manager). Тут диспетчер об’єктів є заміною для методів getModel
та getSingleton
.
2 способи створення екземпляра моделі в Magento 2
В Magento 2 є два способи, за допомогою яких ви можете викликати Object Manager для створення екземпляра моделі або для отримання колекції моделі.
Спосіб №1: Використання Object Manager безпосередньо в будь-якому місці
Припустимо, ми хочемо отримати колекцію товарів в phtml-файлі нашого власного модуля (або теми) Magento 2. Це можна зробити за допомогою наступного коду:
<?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); $productCollection->addAttributeToSelect('*'); $productCollection->load(); foreach ($productCollection as $product) { var_dump($product->getData()); }
Спосіб №2: Зробити ін’єкцію залежностей моделі в конструкторі та створити екземпляр
Другий (і рекомендований) підхід для створення екземпляра моделі в Magento 2 – це використання конструктора та ін’єкції залежностей. Щоб отримати колекцію товару в вашому користувацькому phtml
файлі, вам потрібно створити файл Блоку і впровадити модель товару в конструктор цього Блоку.
Крок №1: Створення файлу Блоку
Для прикладу файл Блоку Index.php
знаходиться в app/code/{VENDOR}/{MODULE}/Block/Index
<?php namespace {VENDOR}\{MODULE}\Block\Index; class Index extends \Magento\Framework\View\Element\Template { protected $_productCollectionFactory; public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, array $data = [] ) { $this->_productCollectionFactory = $productCollectionFactory; parent::__construct($context, $data); } public function getProductCollection() { $collection = $this->_productCollectionFactory->create(); $collection->addAttributeToSelect('*'); return $collection; } }
Крок №2. Виклик методу getProductCollection в phtml-файлі
Для прикладу файл шаблону get-prod-collection.phtml
знаходиться в app/code/{VENDOR}/{MODULE}/view/frontend/templates
<?php $prodCollection = $block->getProductCollection(); foreach ($prodCollection as $product) { var_dump($product->getData()); }
Ось ми і розглянули 2 способи отримання колекції товару в phtml
файлі.
Який підхід використовувати?
Відповідно до Офіційної документації Magento 2, ви завжди повинні використовувати метод конструктора для створення екземпляра моделі, щоб підтримувати реалізацію впровадження залежностей. Ось пряма цитата:
Magento prohibits the direct use of the ObjectManager in your code because it hides the real dependencies of a class.
Magento забороняє пряме використання ObjectManager в вашому коді, тому що він приховує реальні залежності класу.Magento DevDocs
Відповідно, вибір не великий :). Але ви можете використовувати 1-й спосіб з прямим зверненням до ObjectManager, наприклад, для налагодження і тестів.
Останні пости
Які товари найбільш маржинальні
Високомаржинальні товари – це та категорія, яка забезпечує підприємству найвищий рівень прибутку через значну різницю… Читати далі
Як працює рішення SD-WAN: Основи технології та сфери застосування
У сучасному світі, де бізнеси намагаються вдосконалити свої мережі та забезпечити безперервний доступ до додатків… Читати далі
Які строки варто прописати у договорі про розробку програмного забезпечення, щоб зробити процес роботи комфортним та передбачуваним?
Чітке визначення термінів проекту формує очікування, зменшує ризик порушення дедлайнів та посилює продуктивність співпраці між… Читати далі
Комп’ютер: недорогий і функціональний водночас
Важко уявити собі роботу, розваги, спілкування та дозвілля без комп'ютера. Він допомагає у різних сферах… Читати далі
Можливості сучасної апаратної косметології
Сучасні жінки та чоловіки схильні сильно дбати про свій зовнішній вигляд. Виглядаючи доглянуто, молодо та… Читати далі
Чи є у 40ка дюймових телевізорах переваги?
Коли люди збираються купити плазму, вони завжди шукають інформацію в Інтернеті і це добре. Тим… Читати далі