Drupal 8 模块开发 4.1 : 实体,内容实体和配置实体

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

原文地址: https://docs.acquia.com/article/lesson-41-entities-content-entities-and-configuration-entities

Drupal 7 引入了实体(entities)这个主要概念,根源在于面向对象编程。所有东西都以实体的概念存在是 Drupal 7 的目标,Drupal 7 的核心只有几个实体类型:节点(nodes)、评论( comments)、 词汇(terms)和用户(users)。  

要进一步扩展 Drupal 7 核心的实体 API,需要借助第三方捐助模块 Entity API,由捐助模块提供处理实体和属性的统一接口。这个模块也包括一个实体 CRUD(Create, Read, Update 和 Delete) 控制器,用于创建新的实体类型。

Drupal 7 之前,只有节点(nodes)可字段化。然而随着把 Drupal 7 核心框架部分建模为实体后,也可以向评论、词汇和用户添加字段。

随着 Drupal 8 的到来,Drupal 已经有能力通过配置管理产生实体和字段(第 3 课已经含盖到)。

实体和实体类型

一个实体(像 Drupal 7 在 An introduction to entities 中定义的那样)是一个独立存在的对象。Drupal 8 中他们又被定义为一种特定类型的对象,每一个实体是一个实体类型(一种事物的抽象)的实例。这允许开发者把字段组织为可重用的形式。Drupal 8 中内容类型是实体类型的子集,实体类型是更通用的术语。  

一些常见的实体类型是:

  • 节点(内容类型)
  • 评论
  • 分类术语
  • 用户资料
  • 配置实体

另一种方式看待实体类型
每一个实体类型可以有不同版本的类型,叫做绑定(bundles)。例如节点实体类型的绑定叫做内容类型(content types)。节点也是唯一一个给出了绑定名称的实体类型,作为它在 WEB 接口中使用的通俗名称。也可以理解为实体拥有绑定,内容类型是节点这个实体类型为它的所有绑定起的范名、统称。通过专门化我们的实体,我们得到专门化的显示模式、形式和不同的主题,Drupal 应用的其他部分也鼓励专门化为多种实体绑定类型。  

配置实体

Drupal 8 引入了配置实体概念,它利用了实体系统的 CRUD 和可插拔存储功能。这与普通配置的不同之处在于,他们通常是用户创建的、并经常需要触发和响应钩子(hooks)。  

潜在的配置实体例子包括:

  • 内容类型(Content types)
  • 视图(views)
  • 分类词汇表(Taxonomy vocabularies)
  • 联系表单(Contact forms)
  • 图片样式(Image styles)

  要定义新的配置实体类型,你应该继承 ConfigEntityBase 类。配置实体当前不支持修订版本(RevisionableInterface)。  

创建内容类型

创建内容类型最容易的方式是通过用户界面。Using an entity reference 描述了怎样创建内容类型(从第 5 步开始)。

Drupal.org 也包含怎样创建内容类型的一个 example。  

使用 Console 创建一个内容类型

另一种创建实体的方式是使用 Console 项目。

Console 能够:

  • 产生 moudle 和 info 文件。
  • 为模块生成 PSR-4 标准的目录结构。
  • 在 YAML 文件注册路由,映射到控制器和表单的 PHP 类。
  • 创建类,追加名字空间、uses,需要时也可以有 extend 和 implements 关键字。
  • 支持类产生时通过依赖注入追加 services 。

使用代码手动创建实体

这个请参考原文