我创建名为“student”的简单模块,这个模块生成新实体是“学生”,这是我的代码Download here
但是当我添加新学生时,我收到一条错误消息:
EntityMalformedException:在类型student的实体上缺少bundle属性。在entity_extract_ids()中(C:\ AppServ \ www \ drupal-7.12 \ includes \ common.inc的第7501行)。
我浏览了所有代码,但我找不到一些东西,非常感谢!
这个问题 - 'Missing bundle property on entity of type file error' - 可能是导致你出现问题的原因。快速检查以确认这一点是为了遵循comment #5中采取的步骤,如下所示:
我有同样的问题,这显然是由实体对象中缺少实体类型属性引起的。我查看了我的数据库,发现表“file_managed”有一个字段“type”。我填写了有问题的实体对象的类型并且它有效。显然这不是一个真正的解决方案(手动更新数据库),因为存在数百个条目......
Drupal核心common.inc
文件引发错误,条件如下:
if (!empty($info['entity keys']['bundle'])) {
// Explicitly fail for malformed entities missing the bundle property.
if (!isset($entity->{$info['entity keys']['bundle']}) || $entity->{$info['entity keys']['bundle']} === '') {
throw new EntityMalformedException(t('Missing bundle property on entity of type @entity_type.', array('@entity_type' => $entity_type)));
}
$bundle = $entity->{$info['entity keys']['bundle']};
}
因此,如果您的bundle属性在保存时格式不正确,则显式失败,因为它无法识别哪种类型(包)。
有很多原因导致这种情况失败,因此您必须先对其进行分析。
(如果你没有drush,你可以在/ devel / php中运行PHP代码,如果启用了Devel模块)。
bundle
部分中entity keys
的值是多少:
drush eval 'print_r(entity_get_info("student"));'
type
,那么这意味着你想要保存的实体,它缺少type
属性。常见的错误通常是通过entity_load()加载实体并尝试重新保存它,但请记住,返回值是由其id引用的实体对象数组。
因此,验证您的实体重新保存是否正常工作的简单测试将是:
drush eval '$entity = entity_load("student", array(1)); entity_get_controller("student")->save(reset($entity))'
学生是你的entity_type
,1
是你的实体id。
如果它仍然不起作用,清除缓存(entity_info_cache_clear()
)或临时编辑你的common.inc
并转储(例如var_dump($entity);
你的$entity
就在抛出线之前,检查传递给函数的内容并进一步调查为什么你的包type
丢失了。
有关更多可能性和详细信息,请查看:DO的How to debug EntityMalformedException?
在我的例子中,问题是我试图用另一个类型的nid保存一个类型的节点。我只需要检查nid类型是否确实是保存/更新节点的类型。
我和模块User import有同样的问题。我通过this patch解决了用户导入模块。我希望这个解决方案可以帮到你。
加
var_dump(debug_backtrace());
在错误之前排队然后你会得到更多的错误信息。这可能会帮助您解决这个问题。
并检查表映射ID其中一些缺失...
EntityMalformedException:类型文件的实体上缺少bundle属性。在entity_extract_ids()中
对于我们的情况,结果是用户帐户本身就是问题!
出于某种原因,一旦添加了所有好的用户访问权限就消失了!