logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

通过 .info.yml 文件让 Drupal 8 知道你的模块

04/10/2025, by Ivan

主题核心:项目元数据

.info.yml 文件(也称为 “info yaml 文件”)是 Drupal 8 模块、主题或安装配置文件的重要组成部分,用于存储项目的元数据。

这些 .info.yml 文件的作用包括:

  • 告诉 Drupal 模块、主题或安装配置文件的存在。
  • 区分不同类型的主题或模块。
  • 为 Drupal Web UI 管理页面提供信息。
  • 指定模块启用和禁用的管理条件,以及与 Drupal 版本的兼容性。
  • 在其他上下文中的一般管理用途。

 

更多信息请参阅最新 API:InfoParserInterface.php。(点击“查看源代码”。)

Hello World

以下是我们将要使用的 hello_world.info.yml 文件。如果你要跟随教程,请在模块的根目录中创建一个新文件 hello_world.info.yml,并粘贴以下代码:

name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom

type: module
core: 8.x

让我们逐行看看它的作用。

前三行主要用于管理员界面,用户可以在此启用或禁用模块。键 namedescription 提供了显示在模块管理页面上的文本,而键 package 允许将类似的模块分组。例如,核心模块使用 package: Core 将所有 Drupal 8 自带模块分组;你也可以使用 package: Custom 将自己项目的所有自定义模块分组,以便更容易找到和启用。

type 键(Drupal 8 新增)指定扩展类型,例如模块、主题或配置文件。

对于发布在 drupal.org 上的模块,版本号由打包脚本自动填充。你不需要手动指定,而是直接省略 version 行。

core 键指定了你的模块兼容的 Drupal 核心版本。

nametypecore 是必填键。

指定 core_version_requirement
警告
目前 DrupalCI 不支持测试补丁中修改 core_version_requirement。

你是否需要 core_version_requirement?

定义核心版本约束时的优先级顺序如下:

  • 如果在 composer.json 中指定了核心版本要求,它具有最高优先级。
  • 如果 composer.json 没有核心版本要求,那么 info.yml 中的 core_version_requirement 优先。
  • 如果 info.yml 中没有 core_version_requirement,则使用 info.yml 中 dependencies 部分的主模块所指定的版本。

 

在需要时指定 core_version_requirement

在模块、主题和配置文件的 *.info.yml 文件中新增的 core_version_requirement 键现在支持 Composer 项目实现的语义化版本管理。这允许它们声明同时兼容多个 Drupal 核心版本。

例如,一个同时兼容 Drupal 8 和 Drupal 9 的模块,可以有这样的 info.yml 文件:

name: My Module
type: module
core: 8.x
core_version_requirement: ^8 || ^9

这表示该模块兼容所有 Drupal 8 和 9 版本。这里需要保留 core: 8.x,因为 Drupal Core 8.7.7 之前的版本无法识别 core_version_requirement 键。

然而,大多数模块在与 Drupal 9 兼容之前需要移除废弃代码,因此它们无法兼容所有的 Drupal 8 版本。

例如,一个兼容 Drupal 8.8.0 及以上版本和 Drupal 9 的模块,其 info.yml 应如下所示:

name: My Module
type: module
core_version_requirement: ^8.8 || ^9

此时 core:不应使用,以确保 Drupal 8.7.7 之前的版本不会尝试安装该模块。若同时声明 core 和 core_version_requirement,且 core_version_requirement 不是 ^8 || ^9,则会报错。

core_version_requirement 不能用于限制核心版本低于 8.7.7。例如,core_version_requirement: ^8.7 || ^9 会在解析时出错,因为 ^8.7 会包含 8.7.0 之类的版本,而这些版本不识别 core_version_requirement 键。

因此,当 core_version_requirement 的值不是 ^8 || ^9 时,必须在 Drupal 8.7.7 或更高版本上测试模块。

完整示例

除了前面示例中展示的基本属性外,还有一些附加属性。以下是完整示例:


name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom

type: module
core: 8.x

dependencies:
  - drupal:link
  - drupal:views
  - paragraphs:paragraphs
  - webform:webform (>=8.x-5.x)

test_dependencies:
 - drupal:image

configure: hello_world.settings

php: 5.6

hidden: true
required: true

# 注意:不要自行添加 'version' 或 'project' 属性。
# 它们会由 drupal.org 打包器自动添加。
# version: 1.0
# project: 'hello_world'
  • dependencies:模块依赖的其他模块列表。对 Drupal 核心或贡献模块的依赖应使用 {project}:{module} 格式命名空间,其中 {project} 是项目在 Drupal.org URL 中的名字(例如 drupal.org/project/views),{module} 是模块的机器名称。依赖项还可以包含版本限制,例如 webform:webform (>= 8.x-5.x)。如果你的模块依赖其他提供的模块或库,它们必须声明在模块的 composer.json 文件中。如果有本地自定义模块相互依赖,可以使用 {module}:{module}{module}:{submodule}(用于子模块)。
  • test_dependencies:自动化测试所需的其他模块列表(格式同上),但它们不是模块启用所需的依赖。注意,你必须先将 test_dependencies 的更改提交到 Git 仓库,才能运行依赖于它的测试。或者,也可以使用 Composer 管理测试依赖,参见相关文档
  • configure:如果模块提供配置表单,可以在此指定路由地址。这样,它会在 “扩展” 页面(/admin/modules)上显示一个配置链接。
  • php: 5.6:指定模块所需的最低 PHP 版本。若用户的 PHP 版本过低,模块将无法启用。这用于避免模块使用了旧 PHP 版本中不存在的新功能时报错。
  • hidden: true:隐藏模块,使其不显示在 “扩展” 页面模块列表中。通常用于仅包含测试或仅作为 API 示例的模块。可以通过在 settings.php 中添加 $settings['extension_discovery_scan_tests'] = TRUE 使这些模块可见。
  • required: true:表示模块必须启用,且不能被卸载。
  • 受限制的属性:由 Drupal 打包系统自动添加(versionproject),不要手动写入。

 

调试 .info.yml 文件

模块未显示在 admin/modules 页面

  • 确保 info 文件命名为 {machine_name}.info.yml,并放在模块根目录。
  • 确保文件格式正确。例如,冒号 (:) 前无空格,后必须有空格。格式应与示例一致。
  • 确保文件包含以下行:
type: module
  • 确保模块名以字母或下划线开头。以下为 PHP 有效函数名规则:

 

函数名遵循与 PHP 其他标签相同的规则。有效的函数名必须以字母或下划线开头,后接任意数量的字母、数字或下划线。 正则表达式形式为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

模块显示在 admin/modules 页面,但复选框禁用

  • 确保核心兼容性设置为 8.x:
core: 8.x
  • 确保模块的所有依赖可用。展开模块信息可查看缺少的依赖。

expand_requirements

请注意,部分模块已从 Drupal 8 核心移除,另一些新模块则被加入核心或替换了原有模块。

模块描述为空

记住,description 值用于模块描述。

description: Example Module description.

添加 composer.json 文件

除了在 .info.yml 文件中声明依赖之外,如果模块是 drupal.org 上的贡献模块,并且希望使用 DrupalCI 测试依赖变化,它必须包含 composer.json 文件来声明这些依赖。(DrupalCI 只能检测 composer.json 中的依赖变化,不能检测 .info 或 .info.yml 文件。)

另请参阅