云客Drupal8源码分析之实体entity(六)内容实体储存处理器类
来源:互联网 发布:windows 7 beta 编辑:程序博客网 时间:2024/05/16 10:23
各位《云客drupal8源码分析》系列的读者:
本系列分享希望帮助大家理解drupal8底层原理,并缩短学习时间,但部分重点内容在博客仅发布前言和目录,这是因为:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发高质量的中文资料出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多教程作者?并建立了一个付费阅读drupal资料的网站,学习者仅需支付很少费用即可查询到最用心的知识注解,避免大量查找资料,可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到回报,drupal是精品中的精品,超过一半的世界五百强用她做网站,难能可贵,国内普及初期需要一个良好的土壤,普及开后免费内容会越来越多,为了支持国内发展,云客决定将重点内容放在晴空的这个网站上收费阅读,读者只需要微信支付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版
我是云客,【云游天下,做客四方】,微信号:php-world,欢迎转载,但须注明出处,讨论请加qq群203286137
****************************************以下为前言和目录,请移步:http://nowicode.com/ 阅读本篇完整版*******************************
内容实体储存处理器类,顾名思义就是解决内容实体的储存问题,这主要有两大块内容:
1、 实体数据从储存后端的读写,这个过程需要派发钩子让模块参与进来;2、 实体储存后端的管理,也就是schema的增删改,先有这才能进行数据存取;
储存处理器类是drupal核心之一,比较大,但学习完后您将全面彻底理解实体,建议您先阅读本主题文尾的补充内容,那将让你更好更容易理解本主题,然后再回到这里继续阅读。
在系统中比较典型的是节点实体储存处理器:
Drupal\node\NodeStorage
这是一个很庞大的类,要容纳处理好几条逻辑流:新建实体、更新实体、新建版本、更新版本、新建翻译、更新翻译及Schema维护等等,研究这个类能看到实体储存处理的基本面貌,系统中储存处理器继承结构如下:
节点实体储存处理器继承结构(自上而下依次继承,及实现的接口):
。。。
内容实体储存基类:
。。。
SQL内容实体储存处理器基类SqlContentEntityStorage
该基类执行和数据库有关的详细功能,你可能会奇怪她实现了以下接口
Drupal\Core\Entity\EntityBundleListenerInterface
但实现的方法却是空的,这是因为她是一个基类,默认情况下没什么需要做的,但有时候bundle变化是需要让储存处理器知道的,在具体的储存处理器中可以实现该逻辑,在服务entity_bundle.listener(见本系列相关主题)中如果储存处理器实现了该接口会调用相应方法。
这里列出该基类的一些重点方法的解释:
。。。
以下介绍常用操作的流程和涉及到的钩子
默认内容实体创建流程:
。。。
创建涉及钩子及执行顺序如下:
1、 字段值初始化钩子:$entityTypeId . '_field_values_init' 和'entity_field_values_init'
2、 创建钩子:$entityTypeId . '_create' 和'entity_create'
注意创建实体后并不会被自动保存,如需保存需要显式调用save方法
默认内容实体加载流程:
。。。
默认内容实体版本加载流程:
。。。
默认内容实体保存流程:
。。。
默认内容实体删除流程:
。。。
默认内容实体版本删除流程:
。。。
实体翻译创建流程:
。。。
实体释文键解释:
persistent_cache:
布尔值,默认为true,指示该实体类型产生的实体是否可以进行持久缓存,如果可以则将实体对象序列化后缓存在数据库表cache.entity中,缓存id为:"values:$entityTypeId:$id",缓存标签为:[$entityTypeId . '_values','entity_field_info',]
动态可字段实体储存接口:
。。。
动态可字段实体储存模式接口:
。。。
实体查询:
有这些内容:依据实体属性加载实体、实体查询、实体聚合查询,该块内容很常用,本系列用单独一篇主题介绍,请看后续系列
字段的自定义储存:
系统提供了默认的储存方式,我们大多数时候不需要自定义储存,但在特定情况除外,本系列将专门开设一个主题来讲解她。
补充内容:
1、 可版本化的内容实体的isNew()方法返回的并不是版本是否为新,而是指实体是否为新,只要有一个版本存在那么所有版本都不是新的,判断是否为新建的版本可以用getLoadedRevisionId方法,返回为空表示满意版本id,那么就是指代为新的版本。
2、内容实体构造函数参数解释:
。。。
3、可翻译性:
。。。
4、源语言Original language:
。。。
- 云客Drupal8源码分析之实体entity(六)内容实体储存处理器类
- 云客Drupal8源码分析之实体Entity(三)配置实体储存处理器
- 云客Drupal8源码分析之实体Entity(五)内容实体基类
- 云客Drupal8源码分析之内容实体概述Content Entity
- 云客Drupal8源码分析之实体entity(一):实体基类
- 云客Drupal8源码分析之实体Entity(二)配置实体基类
- 云客Drupal8源码分析之内容实体储存模式处理EntityStorageSchema
- 云客Drupal8源码分析之实体Entity概述
- 云客Drupal8源码分析之实体类型管理器、实体类型、实体Entity
- 云客Drupal8源码分析之内容实体数据库表结构及表映射table mapping
- 云客Drupal8源码分析之用户角色实体
- 云客Drupal8源码分析之实体字段管理器entity_field.manager
- 云客Drupal8源码分析之实体类型bundle信息服务entity_type.bundle.info
- 云客Drupal8源码分析之钩子、模块处理器、函数定义
- 云客Drupal8源码分析之核心处理流程HttpKernel(drupal8执行流程)
- 云客Drupal8源码分析之渲染数组(render array)
- 云客Drupal8源码分析之权限系统(上)
- 云客Drupal8源码分析之权限系统(下)
- μTorrent下载完后的文件的移动、改名和系统重装等问题的解决
- Java 执行shell 脚本
- VICTOR 数字万用表 VC890D
- 1009. Product of Polynomials (25)
- 第十一讲 面向对象基本概念、类和对象的定义格式及其内存分析
- 云客Drupal8源码分析之实体entity(六)内容实体储存处理器类
- 输入三个数,按从大到小排序
- Unity3D
- Retrofit+RxJava+Fresco+MVP
- 初学三分法之考研路茫茫——早起看书
- 在数据库中获取当前时间
- MD5方法
- HikariCP VS druid VS c3p0 VS dbcp VS jdbc 数据库连接池性能比对
- 工作笔记--MFC之调整大小