模块配置文件概述
在Commerce早期版本中使用的config.xml
配置文件的职责现在由位于各种模块目录中的多个文件分担。 仅当模块请求特定配置类型时,才会按需加载Commerce的多个配置文件。
您可以使用这些文件(也称为 配置类型)自定义模块行为的特定方面。
多个模块可以声明影响同一配置类型的配置文件(例如,事件),并且合并这些多个配置文件。
以下是本主题中使用的常用术语:
-
配置对象 — 负责定义和验证配置类型的Commerce库或类。 例如,
config.xml
的配置对象是Magento\Framework\App\Config。 -
配置阶段 — 阶段定义为 主、全局 和 区域。 每个阶段确定何时加载配置类型并与同名配置类型合并。 例如,
module.xml
文件与其他module.xml
文件合并。 -
配置作用域 — 作用域是配置阶段的补充,它定义了配置类型模型。 例如,
adminhtml
是一个区域作用域,该作用域与其他模块的adminhtml
配置一起在阶段加载。 有关详细信息,请参阅模块和区域。
配置加载和合并
本节讨论如何加载和合并配置文件。
Commerce如何加载配置文件
Commerce按以下顺序加载配置文件(所有路径均相对于Commerce安装目录):
- 主配置(应用程序/etc/di.xml)。 此文件用于引导商务。
- 来自模块的全局配置 (
<your component base dir>/<vendorname>/<component-type>-<component-name>/etc/*.xml
)。 从所有模块中收集某些配置文件并将它们合并在一起。 - 模块 (
<your component base dir>/<vendorname>/<component-type>-<component-name>/etc/<area>/*.xml
) 中的区域特定配置。 从所有模块收集配置文件并将它们合并到全局配置中。 某些特定于区域的配置可以覆盖或扩展全局配置。
位置
-
<your component base dir>
是组件所在的基目录。 相对于Commerce安装目录,典型值为app/code
或vendor
。 -
<vendorname>
是组件的供应商名称;例如,Commerce的供应商名称为magento
。 -
<component-type>
是以下之一:module-
:扩展或模块。theme-
:主题。language-
:语言包。
<magento_root>/app/design/frontend
或<magento_root>/app/design/adminhtml
下。<component-name>
: composer.json中定义的组件名称。
配置文件合并
配置文件中的节点将根据其完全限定的XPath进行合并,该XPath具有在$idAttributes
阵列中定义的特殊属性,该属性声明为其标识符。 对于嵌套在同一父节点下的所有节点,此标识符必须是唯一的。
Commerce应用程序合并算法:
- 如果节点标识符相等(或未定义标识符),则覆盖节点中的所有基础内容(属性、子节点和标量内容)。
- 如果节点标识符不相等,则该节点是父节点的新子节点。
- 如果原始文档具有多个具有相同标识符的节点,则会触发错误,因为无法区分这些标识符。
合并配置文件后,生成的文档将包含原始文件中的所有节点。
配置类型、对象和界面
以下各节提供了有关配置类型、其相应的配置对象以及可用于处理这些对象的界面的信息:
配置类型和对象
下表显示了每个配置类型及其相关的Commerce配置对象。
analytics.xml
communication.xml
queue_publisher.xml
配置界面
可以使用Magento\框架\配置下的接口与配置文件进行交互。
如果您创建配置类型,则可以使用这些接口。
Magento\Framework\Config
提供以下界面:
- Framework\Config\ConverterInterface,它将XML转换为配置的内存中数组表示形式。
- Framework\Config\DataInterface,用于在指定的范围内检索配置数据。
- Framework\Config\FileResolverInterface,它标识Magento\Framework\Config\ReaderInterface要读取的文件的位置。
- Framework\Config\ReaderInterface,它从存储中读取配置数据并选择从中读取的存储区。
即文件系统、数据库、其它存储根据合并规则合并配置文件,并用验证模式验证配置文件。
- Framework\Config\SchemaLocatorInterface,它找到XSD架构。
- Framework\Config\ScopeListInterface,它返回范围列表。
- Framework\Config\ValidationStateInterface,它检索验证状态。