magento中文教程之工厂方法介绍

本文深入探讨Magento企业级开发中的工厂模式,揭示如何在不直接依赖ObjectManager的情况下实例化不可注入类。工厂类在ObjectManager和业务代码间创建抽象层,允许动态创建模型实例。通过依赖注入获取工厂单例,调用create方法即可实例化所需对象,同时支持传入参数。此外,工厂还能根据di.xml配置,返回接口的实现类实例。

《magento企业级开发实战》重磅发布!

全面系统学习magento二次开发,点击链接查看:

magento企业级开发实战icon-default.png?t=M4ADhttps://www.kancloud.cn/sbynng1987/magento2_enterprise_develop

工厂是实例化不可注入类的服务类,即表示数据库实体的模型。 它们在 ObjectManager 和业务代码之间创建了一个抽象层。

与 ObjectManager 的关系
Magento\Framework\ObjectManager 是负责在 Magento 应用程序中实例化对象的类。 Magento 禁止在你的代码中依赖和直接使用 ObjectManager。

工厂是此规则的一个例外,因为它们需要 ObjectManager 实例化特定模型。

以下示例说明了简单工厂和 ObjectManager 之间的关系:

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Framework\App\Config;

use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\Simplexml\Element;
use Magento\Framework\App\Config\Base;

class BaseFactory
{
    /**
     * @var ObjectManagerInterface
     */
    protected $_objectManager;

    /**
     * @param ObjectManagerInterface $objectManager
     */
    public function __construct(ObjectManagerInterface $objectManager)
    {
        $this->_objectManager = $objectManager;
    }

    /**
     * Create config model
     *
     * @param string|Element $sourceData
     * @return Base
     */
    public function create($sourceData = null): Base
    {
        return $this->_objectManager->create(Base::class, ['sourceData' => $sourceData]);
    }
}

书写工厂
除非您需要工厂类的特定行为,否则您不需要显式定义它们,因为它们是自动生成的类类型。 当您在类构造函数中引用工厂时,如果工厂类不存在,Magento 的对象管理器会生成工厂类。

工厂遵循命名约定 Factory 其中 是工厂实例化的类的名称。

例如,自动生成的 Magento\Cms\Model\BlockFactory 类是一个实例化类 Magento\Cms\Model\Block 的工厂。

使用工厂
您可以使用依赖注入为特定模型获取工厂的单例实例。

以下示例显示了通过构造函数获取 BlockFactory 实例的类:

function __construct ( \Magento\Cms\Model\BlockFactory $blockFactory) {
    $this->blockFactory = $blockFactory;
}

在工厂上调用 create() 方法会为您提供其特定类的实例:

$block = $this->blockFactory->create();

对于需要参数的类,自动生成的 create() 函数接受它传递给 ObjectManager 以创建目标类的参数数组。

下面的示例显示了通过将参数数组传递给工厂来构造 \Magento\Framework\FlagFactory 对象:

$flag = $this->flagFactory->create([
  'data' =>  ['flag_code' => 'something']
]);

Flag 类有一个 $data 构造函数参数,它对应于上面创建数组中的数据键。

接口
工厂足够聪明,可以解决依赖关系,并允许您获取模块的 di.xml 中定义的接口的正确实例。

例如,在 CatalogInventory 模块中,di.xml 文件包含以下条目:

<preference for="Magento\CatalogInventory\Api\Data\StockItemInterface" type="Magento\CatalogInventory\Model\Stock\Item" />

它指示 Magento 在使用 StockItemInterface 的任何地方使用特定的 Item 类。 当该模块中的类包含工厂 StockItemInterfaceFactory 作为依赖项时,Magento 会生成一个能够创建特定 Item 对象的工厂。

一章:Magento介绍...................................................................................................................4 Magento 的特色......................................................................................................................5 什么是Magento........................................................................................................................6 Magento的元素和专业术语....................................................................................................6 网站和商店(website and store)...................................................................................7 网站(website)..............................................................................................................7 商店(store)..................................................................................................................7 商店界面(store views)................................................................................................7 Magento的程序架构................................................................................................................8 内核(Core)..................................................................................................................9 本地的(Local).............................................................................................................9 社区(Community).......................................................................................................9 扩展(Extensions).........................................................................................................9 模块(Modules)............................................................................................................9 界面(Interface)..........................................................................................................10 主题(Themes)............................................................................................................10 区块(Blocks).............................................................................................................11 第二章:Magento入门.................................................................................................................12 Magento的系统需求..............................................................................................................12 Magento下载..........................................................................................................................13 Magento安装和配置..............................................................................................................14 Magento后台控制面板介绍..................................................................................................14 创建多网站和商店(Creating Multiple Websites and Stores)...................................14 缓存管理(Cache Management).................................................................................16 第三章:建立目录........................................................................................................................17 产品目录概念总览................................................................................................................17 设置默认项....................................................................................................................17 产品图片存放目录(Product Image Placeholders)....................................................19 创建分类(Creating Categories).................................................................................21 分类中添加产品(Assigning products at the category level)....................................24 定制分类页面的外观(Assigning designs at the category level)..............................25 在分类页面中使用静态区块(Using static blocks with categories).........................26 属性(Attributes)................................................................................................................27 创建属性(Creating an Attribute)...............................................................................27 特性(Properties)........................................................................................................27 管理标记/选项(Manage Label/Options)...................................................................30 管理属性集(Managing Attribute Sets).....................................................................31 产品(Procucts)..................................................................................................................34
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值