作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在Drupal7中,核心的实体系统,存放在includes下面的entity.inc文件中,这里面,包含一个DrupalEntityControllerInterface接口、DrupalDefaultEntityController类、EntityFieldQueryException类、EntityFieldQuery类、EntityMalformedException类。所有的实体,必须实现DrupalEntityControllerInterface接口,对于我们常见的大多数实体,只需要继承DrupalDefaultEntityController类即可,如果需要实现的实体不是存放在数据库中的,此时则需要单独的实现DrupalEntityControllerInterface接口。EntityFieldQuery对Entity Field的SQL查询做了封装,当然,封装的不是很彻底,有很多的局限性,对于我们常见的查询,尤其涉及到字段的,用起来非常方便。我们在本章会对EntityFieldQuery做专门的介绍。
在commons.inc文件中,定义了一组与实体相关的API函数:
函数名 |
用途描述 |
entity_create_stub_entity |
帮助函数,用来组装一个带有初始ids的对象结构。 |
entity_extract_ids |
帮助函数,用来从一个实体中提取id、vid、bundle等信息。 |
entity_form_field_validate |
把字段API验证附加到实体表单上。 |
entity_form_submit_build_entity |
对于简单的实体表单,这个函数可以用来将表单提交的值复制到实体属性上面来。 |
entity_get_controller |
获取某一实体类型的实体控制器类。 |
entity_get_info |
获取某一实体类型的实体信息数组。 |
entity_info_cache_clear |
重置有关实体类型的缓存信息。 |
entity_label |
返回实体的标签。 |
entity_language |
返回实体的语言。 |
entity_load |
从数据库中加载实体。 |
entity_load_unchanged |
从数据库中加载未被修改了的实体。 |
entity_prepare_view |
用来触发钩子hook_entity_prepare_view() |
entity_uri |
返回实体的URI元素。 |
我们看到,Drupal7里面,与实体相关的API函数放在了commons.inc文件中,这是一个权宜之计。在Drupal8里面,这些相关的函数都被放到了entity.inc文件中去了。
Drupal核心,包含了与实体相关的钩子函数,这些钩子函数,允许我们在实体生命周期的各个不同阶段,与之交互。我们来看一下这些钩子函数。我们可以在system模块里面的system.api.php文件中,找到这些钩子函数。
钩子 |
描述 |
hook_entity_delete |
实体删除时,用来交互的钩子。 |
hook_entity_info |
这个钩子可以用来定义一个或者多个实体类型。 |
hook_entity_info_alter |
用来修改hook_entity_info里面的定义信息。 |
hook_entity_insert |
实体插入时,用来交互的钩子。 |
hook_entity_load |
实体加载时,用来交互的钩子。 |
hook_entity_prepare_view |
准备显示实体时,用来交互的钩子。 |
hook_entity_presave |
在保存实体前,用来交互的钩子。 |
hook_entity_query_alter |
用来修改或者执行一个EntityFieldQuery。 |
hook_entity_update |
实体更新时,用来交互的钩子。 |
hook_entity_view |
在实体正在组装时,呈现(render)之前,用来交互的钩子。 |
hook_entity_view_alter |
用来修改ENTITY_view()的结果。 |
hook_entity_view_mode_alter |
用来修改正被显示的实体的查看模式。 |