【问题标题】:EntityMalformedException: Missing bundle property on entity of type student. in entity_extract_ids()EntityMalformedException:学生类型的实体缺少捆绑属性。在 entity_extract_ids()
【发布时间】:2012-05-25 14:52:47
【问题描述】:

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

但是当我添加 new student 时,我收到这样的错误消息:

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

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

【问题讨论】:

    标签: drupal-7 drupal-modules


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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 属性在保存时格式错误,则会显式失败,因为它无法识别那是什么类型(bundle)。

      这可能失败的原因有很多,因此您必须先对其进行分析。

      (如果你没有 drush,如果启用了 Devel 模块,你可以在 /devel/php 中运行 PHP 代码)。

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

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

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

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

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

      student 是您的entity_type1 是您的实体 ID。

      如果仍然不起作用,请清除缓存 (entity_info_cache_clear()) 或临时编辑您的 common.inc 并转储(例如 var_dump($entity); 您的 $entity 就在 throw 行之前,然后检查传递给函数的内容并进一步调查您的捆绑包type 丢失的原因。


      有关更多可能性和详细信息,请查看:How to debug EntityMalformedException? at DO

      【讨论】:

      • 对我来说 drush eval 'print_r(entity_get_info("student"));' 不起作用。我不得不使用drush eval "print_r(entity_get_info('student'));"
      • 这很完美,感谢您及时指出问题。
      【解决方案3】:

      在我的例子中,问题是当我试图用另一种类型的 nid 保存一个类型的节点时。 我只需要检查 nid 类型是否实际上是正在保存/更新的节点的类型。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          添加

          var_dump(debug_backtrace());

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

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

          【讨论】:

            【解决方案6】:

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

            对于我们的情况,问题在于用户帐户本身!

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-09
              • 2019-09-11
              • 2018-08-27
              • 2021-04-20
              相关资源
              最近更新 更多