原文地址:
https://docs.acquia.com/articles/drupal-8-fields-entities
此时,创建一个带字段的内容类型的最简单的方法是让 Drupal 写配置文件,之后选择这些配置文件在你的模块内直接使用它们。我们可以看下 Drupal 核心的 YML 文件:
core/profiles/standard/config/install/field.storage.node.field_image.yml
可以看出完全通过手写 YML 文件生成实体字段太繁琐、乏味且很具挑战性。
本课...
- 组装 examples/field_example 模块
- 学习 Drupal 7 和 Drupal 8 实体字段的不同
- 研究用模块创建自定义字段
- 研究用模块改变既存的字段
创建“初始导出配置”
在我们通过用户界面管理配置之前,需要把数据库中的默认配置导出到文件系统里。这使我们能够容易的更新存储的配置和在不同环境间迁移这些配置。
确认已更新 Drush 到最新版本后,运行以下指令:
drush config-export
想了解更多 Drush 信息,请查看 Drush based workflow 。
创建新内容类型
之前课程里已经讨论了如何创建内容类型,我们现在要创建一个。
- 确保 Link 模块激活
- 创建新内容类型 External,保存、编辑字段。
- 增加一个新的 Link 字段,命名为 URL、设置数量 1、保存。
- 重复使用 image 字段,命名为 Screenshot、保存。
导航到 /node/add ,你会看到新的内容类型 External 。
什么是 Configuration Manager ?
Configuration Manager 模块提供了一个用户界面,用于导入、导出配置变更,例如在站点的多个实例间分阶段配置数据。
查看配置变更
导航到配置管理部分 /admin/config/development/configuration,你会看到这些信息:
Your current configuration has changed. Changes to these configuration items will be lost on the next synchronization: * core.entity_form_display.node.external.default * core.entity_view_display.node.external.default * core.entity_view_display.node.external.teaser * core.extension * field.field.node.external.body * field.field.node.external.field_image * field.field.node.external.field_url * field.storage.node.field_url * node.type.external * user.role.administrator
拷贝上面信息,下节会用到。
这些配置文件是什么?
配置文件也就是配置设置,默认存储在数据库内,也可导出为配置文件。 我们将导出这些设置,在我们模块内使用。
首先我们和相应的 UI 表单对比看下每个文件是什么:
- node.type.external
内容类型编辑表单产生的设置。
路径: /admin/structure/types/manage/external - core.entity_form_display.node.external.default
编辑模式下,定义字段表单组件如何表示的设置。
路径: /admin/structure/types/manage/external/form-display - core.entity_view_display.node.external.default
默认查看模式下,定义字段如何表示的设置。
路径: /admin/structure/types/manage/external/display - core.entity_view_display.node.external.teaser
teaser 查看模式下,定义字段如何表示的设置。 - field.field.node.external.body
定义字段 body 的设置。 - field.field.node.external.field_image
定义字段 field_image 的设置。
路径: /admin/structure/types/manage/external/fields/node.external.field_image - field.field.node.external.field_url
定义字段 field_url 的设置。
路径: /admin/structure/types/manage/external/fields/node.external.field_url - field.storage.node.field_url
定义字段 field_url 存储的设置。
路径: /admin/structure/types/manage/external/fields/node.external.field_url/storage
field.field 和 field.storage 文件有什么不同?
字段 API 定义了两个主要数据结构 FieldStorage,Field 和一个绑定概念。一个 FieldStorage 定义了一个能够附着在实体上的特定类型数据。Field 隶属于单独的绑定。一个绑定也可以理解为关联到一个可字段化实体类型的一组字段。
要了解更多关于绑定、字段和实体类型知识请查看 An Introduction to Entities。