magento2的工厂类(DI)

        在 Magento 2 中,Factory 类是一个用于创建模型实例的特殊类。它是设计模式中的一种工厂模式的实现,用于将对象的创建过程与其使用者分离开来。

        实际上相当于Java中的@Autowired注解,magento2中用Factory类去管理Bean的实例化。

工厂类的生成

  • Magento 2 在编译时会 根据模型类的名称 自动创建生成 Factory 类。例如你在todo模组中创建了一个Model叫Bcn/todo/Model/todoModel.php,编译代码后magento2会在当前Model目录下创建一个Factory类:        Bcn/todo/Model/todoModelFactory.php

依赖注入:(一般在当前类构造函数中注入)

  • 在 Magento 2 中,Factory 类通常通过依赖注入(DI)系统来注入到代码中。这意味着你可以在构造函数中接收 Factory 类作为一个成员变量,然后使用它来创建模型对象。
public function __construct( \YourVendor\YourModule\Model\YourModelFactory $yourModelFactory ) { 
$this->yourModelFactory = $yourModelFactory;
}

自动解析构造函数参数

  • 当你在构造函数中注入一个 Factory 类时,Magento 2 的依赖注入系统会自动为你提供一个合适的工厂实例。你可以直接在代码中调用工厂类的 create() 方法来创建模型实例。
    $model = $this->yourModelFactory->create();

    之后你就可以在当前类使用yourModel类中的public方法了。

使用

  • 例如新建一个topic类,如何在代码中使用topic类?
  • 在topic类的构造函数_construct中声明TopicFactory参数变量$topicFactory
  • 构造器中将topic工厂赋值在当前类的_topicFactory变量中
  • 在函数中使用$this->_topicFactory->create();创建一个topic实例,之后在对应处使用topic中的方法(参数)。
    <?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;
    	}
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值