Magento 2中的模块
Magento 2以其可扩展性而闻名。Magento 2开源支持的可扩展性概念之一称为模块化。在本课程中,我们将学习什么是Magento 2模块。
课程概述
在本课程中,我们将学习以下内容:
- Magento 2中的模块是什么?
- 模块名称看起来如何?
- Magento 2模块可以放在哪里?
- 如何创建Magento 2模块?
- 如何在Magento 2中注册模块?
什么是Magento 2模块?
Magento 2中的模块是提供业务逻辑和功能的独立组件或一组组件。Magento 2 Open Source是一个模块化应用程序,它支持模块化。这意味着所有功能都在称为模块的组件中实现和交付。组件也被称为扩展。模块和扩展基本上是同一件事。

Magento 2中的每个扩展或模块都提供了一组功能,这些功能支持模块的业务和功能逻辑。它允许为基于Magento 2的电子商务商店带来其他功能。
例子
让我们以目录模块(Catalog module)为例。Catalog module提供了一组不同的功能,包括类别管理,产品管理,对简单和虚拟产品的产品类型支持,目录浏览功能等。
此外,该模块还为其他模块提供了可扩展性点,从而允许使用附加功能扩展目录模块。这样的附加模块的一个示例是可下载产品模块。
Magento 2中的模块可以从一侧带来一组复杂的功能,而从另一侧则可以带来一个很小的功能,例如,可以在“产品”页面上添加一个图标。
模块名称
每个模块的名称由两部分组成。供应商名称和模块名称。这两个部分用_
(下划线)或\
(反斜杠)连接。因此,模块名称应遵循模式VendorName_ModuleName
。例如,目录模块名称将是Magento
供应商名称和Catalog
模块名称的名称,即 Magento_Catalog
或Magento\Catalog
。
Magento 2中的模块应该放在哪里?
这是一个非常有趣的问题。在Magento 2应用程序中可以在两个位置放置模块。

第一个位置是app/code
目录。该目录用于添加所有自定义和第三方Magento 2模块。开发机构,内部或内部开发人员通常使用此位置,以简化开发过程。
第二个位置是vendor
目录。在composer软件包管理安装期间使用此目录。建议使用composer软件包管理器在Magento 2中安装模块,这是安装Magento 2模块的推荐方法。
在“ 项目结构概述”课程中了解有关Magento 2开源目录结构的更多信息。
如何创建一个模块?
为了创建模块,我们要做的第一件事是创建模块目录。通常,所有模块都位于app/code
目录下。如果您遵循上一课,则该code
目录应该在Magento 2项目的app目录下创建。
在app
目录内,让我们创建code
目录。这是所有模块都应位于的目录。每个Magento 2模块都应位于app/code/VendorName/ModuleName
目录位置下。
让我们创建一个供应商目录。在本课中,卖方是MageMastery
。在app/code/MageMastery
目录内,让我们创建一个模块目录。对于模块名称,这将是FirstModule
目录名称。
每个Magento 2模块必须创建两个必需的文件。这些文件用于将模块通知给Magento 2。在registration.php
和module.xml
文件。

registration.php文件
该registration.php
文件用于将文件系统中的模块通知给Magento 2应用程序。它还用于提供Magento 2模块的位置。将新registration.php
文件放在app/code/MageMastery/FirstModule
目录中。
该文件的内容如下:
<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'MageMastery_FirstModule',
__DIR__
);
Magento\Framework\Component\ComponentRegistrar
类用于在Magento的2应用程序注册一个新的模块。
静态register()
方法接受三个参数。该$componentType
参数接受组件的类型,在模块的情况下为ComponentRegistrar::MODULE
。ComponentRegistrar::MODULE
是一个恒定Magento\Framework\Component\ComponentRegistrar
类,建议使用此常量用于模块登记。
方法的第二个参数register()
是模块的名称。如您所见,名称是VendorName_ModuleName
。在上面的代码示例中,名称为MageMastery_FirstModule
。
最后一个参数是PHP __DIR__
常量。它提供了模块的实际位置,它提供了模块的实际位置,如果Magento 2应用程序安装在/var/www/magento 目录中,它将解释为/var/www/magento/app/code/ magemastery /FirstModule
这是如何工作执行的?
registration.php
文件的允许位置之一是app/code/VendorName/ModuleName
目录(在本课程中,位置是app/code/MageMastery/FirstModule/
)。registration.php
在Magento 2开源应用程序启动期间,将扫描并执行该文件。该方法register()
的ComponentRegistrar
类添加模块名称和它的位置为所有模块的位置的全局池。添加后,Magento 2 Open Source然后遍历所有已注册的模块路径,并读取module.xml
文件的配置。
这就是为什么在Magento 2中成功注册模块时同时拥有这两个文件非常重要的原因。
module.xml文件
该module.xml
文件用于声明并提供有关模块名称以及对其他第三方或现成的Magento 2模块的任何依赖关系的信息。
该module.xml
文件是主模块的配置文件。需要将此文件放入模块etc
目录中。让我们在app/code/MageMastery/FirstModule
目录模块中创建目录。
XML配置文件的示例如下:
<?xml version="1.0"?>
<config>
</config>
这是基本的文件内容,几乎在所有Magento 2配置文件中都使用。在下一课中,我们将学习有关XML配置文件的更多信息。
此外,Magento 2中的所有XML文件在<config>
节点中都包含2个属性。该xmlns
属性提供XMLSchema实例的位置,该xsi:noNamespaceSchemaLocation
属性提供Magento 2框架的XSD(XML Schema Definition)文件的路径。最后一个用于为配置文件提供XML验证和语法突出显示功能。
这些属性不是必需的,但是,建议遵循标准的Magento做法并将其包含到XML文件中。
结果,最终module.xml
文件应如下所示:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MageMastery_FirstModule" />
</config>
唯一需要添加的XML节点是<module />
一个。该name
属性应包括当前模块的名称,即MageMastery_FirstModule
。
如何注册一个模块?
最后一步是运行将启用和安装MageMastery_First
模块的命令。
bin/magento setup:upgrade
您可能会注意到一个新模块已添加到模块列表中。
为了检查模块是否已在Magento 2应用程序中添加和启用。在这里,我使用grep
命令来检查app/etc/config.php
文件中的字符串。
grep MageMastery_FirstModule app/etc/config.php
因此,终端屏幕应显示一个
该值1
表示已启用该模块,并且0
表示已禁用该模块。从输出中可以看到,MageMastery_FirstModule
设置为1
,这表示该模块已成功在Magento 2开源应用程序中注册。
