logo

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

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

演示 EBT 模块 下载 EBT 模块

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

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

演示 EPT 模块 滚动

滚动

在 Drupal 8 中定义和使用你自己的配置

04/10/2025, by Ivan

主要主题:定义自定义配置

你可以在自己的模块中 包含默认配置,其基础是其他模块的功能(节点类型、视图、字段、文本格式等)。
例如,节点模块提供节点类型的配置,因此你可以在自己的模块中定义一个默认的节点类型,并随模块一起提供。

你可能希望为自己的插件、实体和设置定义配置,而这些配置又可以被其他模块使用,就像你可以使用节点类型的配置一样。Drupal 8 让定义你自己的配置变得更简单。

配置文件

模块的配置文件放在模块的 config/install 子目录中。例如,如果模块在 /modules/example 下,那么配置文件路径就是 /modules/example/config/install/example.settings.yml。你可以在此目录中放置模块的配置文件,格式为 YAML。

虽然不是强制要求,但强烈推荐你在为模块定义配置文件时使用模块名称作为前缀:例如 example.settings.yml 用于配置参数。不要将文件命名为 settings.yml 或 system.settings.yml,因为这可能与其他地方的文件名冲突。如果你不遵循此约定,Drush 命令(如 drush config:import)可能会出现问题。

这也允许你为其他组件提供配置,例如一个节点类型示例,你可以 在模块中包含默认配置,其中配置文件为 node.type.example_mytype.yml,节点模块会将其识别为一个节点类型。

配置文件的文件名(不包括 .yml 扩展名)也就是系统中的配置名称,你可以通过 PHP API 来访问它。

配置文件结构

配置文件必须使用 YAML 格式。你可以根据自己的需要组织配置文件,没有其他限制,除了 YAML 本身的语法。例如,如果你需要一个参数来在页面控制器中输出某些内容,文件可以包含一个带字符串值的 message 键:

message: 'Hello'
langcode: 'en'

建议在文件中包含 langcode 键来声明语言代码。语言系统会用它来提供翻译的支持。langcode 键是保留字段,不能在文件顶层用于其他目的。

要实现配置的翻译,需要启用 配置翻译模块

为了让配置支持翻译,你需要再添加两个文件:

- /modules/example/config/schema/example.schema.yml
- /modules/example/example.config_translation.yml

第一个文件定义了自定义配置的 配置架构。我们定义 example.settings 为一个 config_object,包含几个字段。每个字段都有一个类型:基础类型定义决定字段是否可翻译(见 core.data_types.schema.yml)。例如,path 保存的是 Drupal 内部路径,因此不可翻译,而 text 是可翻译的。

# /modules/example/config/schema/example.schema.yml
example.settings:
  type: config_object
  label: 'Example config'
  mapping:
    message:
      type: text
      label: 'Message'

第二个文件为 /admin/config/regional/config-translation 添加了一个翻译表单的入口:

# /modules/example/example.config_translation.yml
example.admin.config:
  title: 'Example module'
  base_route_name: example.admin.config
  names:
    - example.settings

按照约定,键名与基础路由名称相同:example.admin.config 是模块配置表单的路由名。names 列表包含所有在该表单中可编辑的配置键,本例中就是上面架构中定义的自定义配置。

文件也可以包含更复杂的列表和键/值树形结构。例如可以参考 views.view.content.yml 文件,它展示了一个更复杂的配置文件。

配置翻译功能会自动为模块配置表单添加一个“翻译”标签页,不过如果这是唯一的标签页,它可能不会显示。为了添加一个“默认”标签页到配置表单,你需要再添加一个文件 example.links.task.yml(参见 模块定义的本地任务)。

// example.links.task.yml
example.admin.config:
  route_name: example.admin.config
  title: Settings
  base_route: example.admin.config

使用配置

Drupal 8 提供了 PHP API 来读取和写入配置。最简单的使用方法是静态方法 Drupal::config():

$config = \Drupal::config('example.settings');
// 将输出 'Hello'。
print $config->get('message');
// 将输出 'en'。
print $config->get('langcode');

如果你想编辑配置并用新值更新它,可以使用 \Drupal::service('config.factory')->getEditable() 方法:

$config = \Drupal::service('config.factory')->getEditable('example.settings');

// 设置并保存新的 message 值。
$config->set('message', 'Hi')->save();

// 现在将输出 'Hi'。
print $config->get('message');

另见