
路由访问检查器、hook_entity_access() 以及所有需要返回 AccessResultInterface 对象的地方,都必须添加相应的 可缓存性元数据。
如果你还没有阅读,请先了解 缓存标签 (cache tags)、缓存上下文 (cache contexts) 和 最大寿命 (max-age)。


CKEditor API 是 Drupal 8 中的新功能。
请注意,这里仅适用于 Drupal 8 的 CKEditor 模块 API,而不是 CKEditor JavaScript 库的 API —— 相关内容请参见 http://docs.ckeditor.com/。
有关该模块功能的更多信息,请参见 文本编辑器模块文档。
API 特性
按使用频率从低到高排列:
CKEditor 皮肤


配置 API 为模块提供了一个集中存储配置数据的位置。该数据可以是简单配置,例如您网站的名称,或者是通过配置对象管理的更复杂的信息,例如视图和内容类型。
配置是存储 您希望从开发环境同步到生产环境的信息 的地方。这些信息通常在网站构建期间创建,通常不会由普通用户在网站正常运行期间生成。
对于不应在不同实例之间移动的本地变量,您应该使用 状态 API,而不是配置。状态用于隐藏的系统值,如果您永远不希望在不同环境之间部署它们。您可以重建系统并丢失所有状态,但配置会被保留。
配置 API 有两种形式:(简单的)Config API 和 Configuration Entity API。关键区别在于 Config API 是单实例用例。单例意味着只能有一个该配置的实例,例如网站名称。
Configuration Entity API 应用于存储多个配置集合,例如节点类型、视图、词汇表和字段。


在 Drupal 8 中有几种信息类型:
- 内容 (Content)
这些信息旨在显示在您的网站上并由用户编辑:文章、基本页面、图片、文件等。
- 会话 (Session)
关于单个用户与站点交互的信息,例如他们在视图过滤器中的当前选择。这是临时的,并且只针对单个用户。
可能会频繁更改和/或无需用户干预的信息。例如:Cron 上次运行的时间、是否需要重建节点访问权限等。
关于您网站的信息,它不是内容,并且不会经常更改,例如您网站的名称、您定义的内容类型和视图等。


默认情况下,Drupal 8 中的配置信息存储在数据库中。
配置文件格式 (YAML)
扩展(模块、主题和安装配置文件)通过 YAML 文件提供配置信息。
下面是一个配置文件的示例:
some_string: 'Woo kittens!' some_int: 42 some_bool: true
配置也可以是嵌套的。示例如下:


Drupal 8 的配置系统以统一的方式处理配置。默认情况下,Drupal 将配置数据存储在数据库中,但它们可以导出为 YAML 文件,从而能够通过版本控制来管理配置。然而,在某些情况下需要为特定目的覆盖配置值。在 Drupal 7 中,有一个全局变量 global $conf,它通常在 settings.php 中填充条件覆盖的配置值。该系统的主要缺点是覆盖会进入实际的配置中。当保存包含覆盖值的配置表单时,条件覆盖就会写入实际的配置存储。
Drupal 8 引入了配置覆盖系统,该系统:
- 将这些覆盖作为临时层叠在标准配置值之上
- 不将覆盖值用于配置表单
- 可以与其他配置文件一起存储覆盖,从而支持预生产和版本控制(例如,语言覆盖,见下文)。
Drupal 7 中的全局变量 $conf 在 Drupal 8 中重命名为 $config,并在默认的配置系统中启用。
全局覆盖
Drupal 8 保留了使用 global $config 的功能。配置系统通过 Drupal\Core\Config\ConfigFactory::get() 的实现合并这些覆盖值。当您从配置中获取值时,全局变量 $config 会有机会更改返回值:


Drupal 8 包含对由 Kwalify (http://www.kuwata-lab.com/kwalify/) 创建的 YAML 配置文件的架构/元数据语言的支持。Kwalify 本身是用 Ruby 编写的,我们对格式做了一些小的调整,因此并非所有 Kwalify 的细节都能直接应用,但已经非常接近。
速查表
为了快速理解和参考一些便捷的示例,请查看这份速查表,如果您还有疑问,请继续阅读:




本页展示了一个示例,说明如何在 Drupal 8 中创建一个配置对象类型以及对应的管理页面。关于简单配置和配置对象的概念,请参阅 https://drupal.org/node/2120523。
启用包含以下代码的示例模块后,示例配置表单应可通过 “admin/config/system/example” 访问,如截图所示:
模块设置与管理员菜单入口
example/example.info.yml
