Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 22.09.2022)
55510
осіб
253
літаків
218
гелікоптерів
2236
танків
4776
ББМ
1341
артилерія
169
ППО
318
РСЗВ
3630
машин
15
кораблі і катери
Як створити екземпляр моделі в 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, наприклад, для налагодження і тестів.

 

 

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

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