EntityMalformedException:在类型student的实体上缺少bundle属性。在entity_extract_ids()中

时间:2012-05-25 14:52:47

标签: drupal-7 drupal-modules

我创建了名为“student”的简单模块,这个模块生成的新实体是“学生” 这是我的代码 Download here

但是当我添加新学生时,我收到一条错误消息:

  

EntityMalformedException:缺少类型为student的实体的bundle属性。在entity_extract_ids()中(C:\ AppServ \ www \ drupal-7.12 \ includes \ common.inc的第7501行)。

我浏览了所有代码,但我找不到一些东西, 非常感谢!

6 个答案:

答案 0 :(得分:5)

此问题 - “Missing bundle property on entity of type file error” - 可能是导致您出现问题的原因。快速检查以确认这一点是按照comment #5中所采取的步骤进行的,如下所示:

  

我有同样的问题,这显然是由实体对象中缺少的entity-type-property引起的。我查看了我的数据库,发现表“file_managed”有一个字段“type”。我填写了有问题的实体对象的类型并且它有效。   显然这不是一个真正的解决方案(手动更新数据库),因为有数百个条目......

答案 1 :(得分:3)

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模块,您可以在/ devel / php中运行PHP代码。)

  1. 通过以下方式检查实体信息数组中定义的数组的bundle部分中entity keys的值是什么:

    drush eval 'print_r(entity_get_info("student"));'
    
  2. 如果是type,则表示您尝试保存的实体,它缺少type属性。

  3. 常见错误通常是通过entity_load()加载实体并尝试重新保存它,但请记住,返回值是由其ID标记的实体对象数组。

    因此,验证您的实体重新保存是否正常工作的简单测试就是:

    drush eval '$entity = entity_load("student", array(1)); entity_get_controller("student")->save(reset($entity))'
    

    学生是entity_type1是您的实体ID。

    如果它仍然不起作用,请清除缓存(entity_info_cache_clear())或临时编辑您的common.inc并转储(例如var_dump($entity);您的$entity ,并检查传递给函数的内容,并进一步调查您的软件包type缺失的原因。


    有关更多可能性和详细信息,请在DO

    上查看:How to debug EntityMalformedException?

答案 2 :(得分:1)

在我的情况下,问题是当我尝试使用另一个类型的nid保存一个类型的节点时。 我只需要检查nid类型是否确实是保存/更新节点的类型。

答案 3 :(得分:0)

模块User import遇到了同样的问题。 我通过this patch向用户导入模块解决了这个问题。 我希望这个解决方案可以帮到你。

答案 4 :(得分:0)

添加

var_dump(debug_backtrace());

错误之前的行,然后您将获得更多错误信息。这可能会帮助你解决这个问题。

并检查表映射ID,其中一些缺失...

答案 5 :(得分:0)

EntityMalformedException:类型文件的实体上缺少捆绑属性。在entity_extract_ids()

对于我们来说,事实证明用户帐户本身就是问题所在!

由于某种原因,用户访问权限一经添加就全部消失了!