Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 27.05.2022)
29750
осіб
206
літаків
170
гелікоптерів
1322
танків
3246
ББМ
623
артилерія
93
ППО
201
РСЗВ
2226
машин
13
кораблі і катери
Як створити екземпляр моделі в Magento 2

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

 

 

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

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