【问题标题】:Cannot create a new entity (created with ECK) through API using REST module无法使用 REST 模块通过 API 创建新实体(使用 ECK 创建)
【发布时间】:2017-08-08 05:44:22
【问题描述】:

这是我的情况:我使用带有 Drupal 8 的 ECK 模块来创建实体和包,并使用新的 REST 核心模块来创建 API 功能。

我已经安装了 REST_UI 模块,并为我感兴趣的实体启用了路由。

这是我的问题:我使用 ECK 创建了一个实体类型和一个捆绑包,然后当我使用 POST 请求调用 /entity/entity_type_name 端点时,我可以创建一个新实体,并将以下参数作为 json:

{
   "type":[{"target_id":"bundle_name"}],
   "field_test_text":[{"value":"test"}]
}

但是,这仅在我的实体列表中只有一种实体类型时才有效;假设我决定创建一个新的实体类型,然后运行相同的请求,我收到以下错误消息:

Drupal\Core\Entity\Exception\AmbiguousEntityClassException: Multiple entity types found for Drupal\eck\Entity\EckEntity

显然,我明白,既然我有多种实体类型,Entity API 无法理解它必须创建的实体类型应该是什么(我觉得这很奇怪,考虑到我在此表单下的 URL /entity/entity_type_name 并且对于我拥有的不同类型的实体有不同的可用路由)。

我想我需要在我的 json 中传递一个额外的参数,以便 Drupal 了解它应该创建什么样的实体,但是这个参数是什么?我一直在尝试在网上和文档中查找,但我无法弄清楚如何做到这一点。

【问题讨论】:

  • 你有 API url 来列出可用的实体吗?也许你可以像那样找出问题所在
  • 我使用 ECK 管理界面检查可用的实体,它给了我它们的机器名称。
  • 在管理界面时可以转储电话并返回吗?是看它是怎么处理的?

标签: drupal drupal-8 drupal-entities


【解决方案1】:

我遇到了同样的问题,我是这样解决的:

  1. 启用 HAL 模块。
  2. /admin/config/services/rest 中的Accepted request formats 下启用hal_json 该特定资源。

然后,在您的 POST 请求中,使用标头:

  • Content-Type: application/hal+json
  • X-CSRF-Token: [AUTH SESSION TOKEN]

请求的body 是:

{
  "_links": {
   "type": {
     "href": "http://localhost:8080/rest/type/[ENTITY_TYPE]/[ENTITY_BUNDLE]"
   }
  },
  "title":[
    {"value": "This is a new entity title"}
  ],
  "field_example":[
    {"value": "This is an example of a custom text field value."}
  ]
}

Drupal 正在从_links.type.href 字符串中读取实体类型和捆绑包。

例如,如果您的实体类型是 automobile,而您的捆绑包是 car,那么您的 URL 将是 "http://localhost:8080/rest/type/automobile/car"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多