
本页描述了用于获取和设置简单配置数据的 API。(这并不是为存储在 配置对象 中的信息准备的。)
配置数据
每个模块都可以提供默认配置。例如,维护模式的设置定义在 core/modules/system/config/install/system.maintenance.yml 文件中。在这个文件里,第一部分是命名空间,表示哪个模块提供了此配置(本例中的 system 模块),后面是子系统(本例中的 maintenance)。文件 必须 位于 config/install 目录中。同时,它的文件名必须包含“.”符号,以便 ConfigBase->validateName($name) 进行校验。该文件包含如下 YAML:


在表单上下文中使用 $config
您可以使用 配置表单 来了解 $config 如何获取用户输入的数据,并修改 {module}.settings.yml 文件中的数据。下面是一个在表单中声明 $config 对象的代码示例,您可以在表单设置的 PHP 文件中找到。
Drupal Core 的 ConfigFactory 类是读取和写入配置数据的方式,它用于根据指定配置文件的内容创建一个 Config 对象实例。新的 Config 对象随后可以用于对这些数据执行 CRUD 操作。
表单定义示例(位于 example/src/Form/exampleSettingsForm.php):


Drupal 8 的数据库 API 提供了一个标准的、与供应商无关的抽象层,用于访问数据库服务器。除非您在开发核心 API,否则几乎不应该直接调用数据库。
该 API 的设计目标是尽可能保留 SQL 的语法和功能,同时还要:
- 轻松支持多个数据库服务器;
- 允许开发人员使用更复杂的功能,例如事务;
- 提供结构化接口,用于动态构建查询;
- 确保安全检查和其他最佳实践;
- 为模块提供干净的接口,以拦截和修改站点查询。
数据库 API 的核心文档 直接来自代码中的注释。本手册部分补充了这些 API 文档,为希望与数据库系统交互的模块作者提供教程,同时也从管理员的角度提供系统概览。
数据库 API 是基于面向对象的设计概念构建的,因此本文档假定至少部分熟悉这些概念。常见操作也有过程式的风格可用,但不推荐使用这些过程式风格。建议通过数据库连接对象与数据库交互。


Drupal 的数据库层构建在 PHP 的 PDO 库 之上。PDO 提供了统一的面向对象 API 用于访问不同的数据库,但它并未为不同数据库使用的 SQL 方言提供抽象。
驱动程序
由于不同的数据库需要不同的交互方式,Drupal 的数据库层要求每种数据库类型都有一个驱动程序。驱动程序由一系列文件组成,这些文件位于 include/database/driver 目录中,其中 driver 是一个字符串,代表该驱动的唯一键。在大多数情况下,驱动键是数据库名称的小写形式,例如 “mysql”、“pgsql” 或 “mycustomdriver”。
每个驱动由几个类组成,这些类继承自数据库基础系统中的父类。这些特定于驱动的类可以重写任何行为,以便正确支持该类型的数据库。特定驱动的类总是以其父类名开头,后跟下划线,再后跟驱动名称。例如,MySQL 的 InsertQuery 版本名为 InsertQuery_mysql。
连接
连接是一个 DatabaseConnection 类的对象,该类继承自 PDO 类。Drupal 连接的每个数据库都关联一个连接对象。该连接对象必须为每个单独的驱动创建子类。


定义数据库连接的主要方式是在 settings.php 中的 $database 数组。顾名思义,$database 允许定义多个数据库连接。它还支持定义多个目标。在第一段代码尝试对该数据库执行查询之前,数据库连接不会被打开(不会创建连接对象)。
连接键
$databases['default'] // 数据库连接。
连接键是给定数据库连接的唯一标识符。连接键必须在该站点中唯一,并且必须始终有一个默认连接作为 Drupal 的主数据库。在大多数站点中,这将是唯一定义的连接。
目标
$databases['default']['default'] // 数据库目标。
给定的连接键必须有一个或多个目标。目标是如果可用时可以使用的数据库。每个连接键的目标中都必须定义一个 "default"。如果请求的目标未定义,系统会自动回退到 "default"。


与数据库的交互应通过数据库连接对象进行。有几个场景需要注意:
1. 在过程式代码中,即 *.module、*.inc 或脚本文件中:
创建数据库连接对象实例的最佳方式是通过服务容器(Service Container)。
示例:
$database = \Drupal::database(); // 或者 $database = \Drupal::service('database');
这将生成一个数据库连接对象,该对象被配置为连接到 settings.php 文件中定义的默认主数据库。
2. 出于历史和技术原因,\Drupal::database() 返回的类型是 \Drupal\Core\Database\Connection,因此它有时也被称为 $connection。
3. 在面向对象(OOP)的代码中:


在 Drupal 中最常见的 SELECT 查询是使用数据库连接对象的 query() 方法的静态查询。
静态查询几乎是逐字传递到数据库的。
示例:
$database = \Drupal::database(); $query = $database->query("SELECT id, example FROM {mytable}"); $result = $query->fetchAll();
只有非常简单的 SELECT 查询才应该使用静态 query() 方法。如果您需要更复杂的查询、动态生成的查询或可变性,您应该使用 动态查询。


要创建 Drupal 8 主题,首先需要创建一个 THEMENAME.info.yml
文件,它为 Drupal 提供关于你主题的元数据。这与模块和安装配置文件的定义方式类似,因此在 file.info.yml
文件中将键 type
设置为 theme
很重要,以便加以区分。
此页面包含一个 THEMENAME.info.yml
文件示例,以及该文件可能包含的信息概述。
