Drupal 8 中的配置存储
默认情况下,Drupal 8 中的配置信息存储在数据库中。
配置文件格式 (YAML)
扩展(模块、主题和安装配置文件)通过 YAML 文件提供配置信息。
下面是一个配置文件的示例:
some_string: 'Woo kittens!' some_int: 42 some_bool: true
配置也可以是嵌套的。示例如下:
name: thumbnail
label: 'Thumbnail (100x100)'
effects:
1cfec298-8620-4749-b100-ccb6c4500779:
id: image_scale
data:
width: 100
height: 100
upscale: true
weight: 0
uuid: 1cfec298-8620-4749-b100-ccb6c4500779
配置架构
配置有对应的架构。这在 配置架构/元数据文档 中有详细描述。
扩展的默认配置
扩展(模块、主题或安装配置文件)如果要为其配置提供默认值,必须将这些配置存储在其 config/install 子目录下的 YAML 文件中。
如果扩展只需要基本的简单配置参数,所有默认设置可以放在一个文件 modulename.settings.yml 中。对于更复杂的设置,可以将配置拆分为多个文件。每个配置对象都必须存储在自己独立的 YAML 文件中,并且应由模块在写入配置时自动生成(不要尝试手动编写它们)。
如果需要为某些动态值(因此不能在 modulename.settings.yml 中设置)提供默认配置,请在 hook_install() 中实现。例如:
/**
* Implements hook_install().
*/
function modulename_install() {
// 为需要动态值的配置设置默认值。
\Drupal::configFactory()->getEditable('modulename.settings')
->set('default_from_address', \Drupal::config('system.site')->get('mail'))
->save();
}
扩展的可选配置
扩展(模块或主题)的可选配置存储在其 config/optional 子目录中。
这些是依赖于扩展本身未显式依赖的其他组件的配置,因此它们只会在所有依赖项满足时才会被安装。
例如,在某个场景中,模块 A 有一个可选配置需要依赖模块 B。如果模块 A 先安装,而模块 B 稍后才安装,那么在模块 B 安装时,Drupal 会扫描模块 A 的 config/optional 目录以查找新发现的依赖关系,并在此时安装该配置。如果模块 B 永远不安装,那么该可选配置也不会安装。
活动配置存储
默认情况下,Drupal 8 将活动配置存储在数据库中,以提高性能和可扩展性。参见「默认活动配置」从文件存储改为数据库存储的详细信息。
从 YAML 更新配置到数据库
在开发过程中,如果需要将 YAML 文件中的配置更新到数据库,可以使用 drush config-import (cim) 命令。
您可以编辑位于活动配置目录(在 settings.php 中定义,例如 sites/default/files/config_6dh1U_2YKLGrrh5oLxAgobbledygook/sync)中的 yml 配置文件,然后运行 drush cim。清除缓存(drush cr)即可查看更改。
如果您对 yml 文件中的设置感到满意,可以将它们复制到您的模块或主题中。