在这个部分,我们将讨论 Magento 2 中模块的工厂对象,在 OOP 中,工厂方法将用于实例化对象,在 Magento 2 中,Magento 2 工厂对象用来做同样的事情。
工厂类名是一种模块类的名称,并依靠 ‘Factory’ 关键字,在之后的例子中,会使用 TopicFactory 类,你不必创建这个类,当 Magento 对象管理器遇到以 ‘Factory’ 结尾的类名时,就会为你创建,如果这个类不存在,Magento 会在 var/generation 目录下自动生成工厂类,你可以在一下目录看到:
var/generation/<vendor_name>/<module_name>/Model/ClassFactory.php
要实例化模型对象,我们将使用自动构造函数依赖注入来注入工厂对象,然后使用工厂对象来实例化模型对象。
例如,在块中将调用这个模块来获取数据。创建一个 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;
}
}
正如你在代码块看到这样,TopFactory 对象在 _construct()
函数中被创建,在 _prepareLayout()
函数中,使用 $topic = $this->_topicFactory->create();
创建模块对象。