跳转到主要内容
kidd1126 提交于 25 March 2013

很高兴,上个星期六也就是前天参加了上海drupal 2013 3 23中国营活动,会上有人提问,为什么entity不在drupal的核心模块里?他很不能理解明明是drupal一个很重要重大的改变为什么这个模块不在core里,他不能理解。

ok,我在这里给出我的回答。

(插个广告 正在考虑换工作 有意者联系:378694760 )

 

首先这个问题就问错了。

不是entity没有在核心模块,而是entity api没有在核心模块。

就好像core里有forum模块,但是没有advanced forum模块一样,drupal喜欢把轻量级的最基础的模块放在核心里,更多复杂扩展则留给第三方模块。

entity api顾名思义是个api模块,提供了一个统一的方法去处理Entities和它们的属性。另外它提供了一个entity CRUD 控制器,来简化创建新实体类型的流程。所以entity api模块作为提供更多api操作entity的模块并没有在核心里,没什么不能理解的。

其次,entity是drupal7的基本核心概念,没有entity type就没有node,没有user。

entity就是drupal的code,打个比方,他是插座,不是插件。不用entity就等于不用drupal,所以也没有这么一个叫entity的模块来让你选择是否启用。

最后简单说开来我理解的实体的概念,node就是一个entity type的实例,node这个实例与user有点不同,node有bundle,所以node可以有好多不同的类型,比如article,page等等。bundle就是一个数据扩展,把不同的字段聚合起来给对应的node type。也就是bundle知道哪个字段是article哪个字段是page的,这样一个node的entity type实例可以创建不同的node type。

3.26补充说明

bundle可以被字段绑定,node这个entity type有很多独立分离的bundle所以你可以创建很多node type然后不同的type绑定不同的字段。user只有一个bundle所以你可以给user添加字段(不需要其他module,原生支持)但是不能创建类似user type这样的类型。

articles
tags