在这一部分中,我们将讨论Magento 2中的工厂对象模型。如您所知,在OOP中,将使用工厂方法来实例化对象。在Magento 2中,Magento 2 Factory Object也做同样的事情。
该工厂类名称是模型类的名字,并与附加Factory
字。因此,对于我们的示例,我们将使用TopicFactory类。您不能创建此类。Magento将为您创造它。每当Magento的对象管理器遇到以“Factory”结尾的类名时,如果该类尚不存在,它将自动在var / generation文件夹中生成Factory类。你会看到工厂类
var/generation/<vendor_name>/<module_name>/Model/ClassFactory.php
要实例化模型对象,我们将使用自动构造函数依赖项注入来注入工厂对象,然后使用工厂对象来实例化模型对象。
例如,我们将调用模型来获取Block中的数据。我们将创建一个Topic块:
Mageplaza\HelloWorld\Block\Topic.php
此文件的内容:
<?php
namespace Mageplaza\HelloWorld\Block;
class Topic extends \Magento\Framework\View\Element\Template
{
protected $_topicFactory;
public function _construct(
\Magento\Framework\View\Element\Template\Context $context,
\Mageplaza\HelloWorld\Model\TopicFactory $topicFactory
){
$this->_topicFactory = $topicFactory;
parent::_construct($context);
}
public function _prepareLayout()
{
$topic = $this->_topicFactory->create();
$collection = $topic->getCollection();
foreach($collection as $item){
var_dump($item->getData());
}
exit;
}
}
正如您在此块中看到的,将在_construct()
函数中创建TopicFactory对象。在_prepareLayout()
函数中,我们使用$topic = $this->_topicFactory->create();
创建模型对象。