4.1 实体,内容实体和配置实体
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 已经有能力通过配置管理产生实体和字段(第 5 课会介绍此内容)。
实体和实体类型
一个实体(像 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 。