Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 29.04.2024)
467470
осіб
348
літаків
325
гелікоптерів
7285
танків
14007
ББМ
11985
артилерія
778
ППО
1051
РСЗВ
16109
машин
26
кораблі і катери
Як створити екземпляр моделі в Magento 2
Опубліковано Оновлено: 29.06.2019

Як створити екземпляр моделі в 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, наприклад, для налагодження і тестів.

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *