Magento 2 工厂对象

在这个部分,我们将讨论 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(); 创建模块对象。

本教程翻译自Mageplaza模块开发系列,其他内容请点击下面链接: