Drupal 8 模块开发 5.1 : 实体字段

蒲公英 提交于 周四, 08/17/2017 - 15:51
Drupal8模块开发

原文地址:
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 。  

创建新内容类型

之前课程里已经讨论了如何创建内容类型,我们现在要创建一个。

  1. 确保 Link 模块激活
  2. 创建新内容类型 External,保存、编辑字段。
  3. 增加一个新的 Link 字段,命名为 URL、设置数量 1、保存。
  4. 重复使用 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。