无法使用REST模块

时间:2017-08-08 05:44:22

标签: drupal drupal-8 drupal-entities

以下是我的情况:我正在使用带有Drupal 8的ECK模块来创建实体和包,以及用于创建API功能的新REST核心模块。

我已经安装了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

我明白,显然,现在我有多种实体类型,实体API无法理解它必须创建的实体的类型(我觉得很奇怪,考虑到我提供它此格式/entity/entity_type_name下的网址以及我拥有的不同类型的实体可以使用不同的路由。

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

1 个答案:

答案 0 :(得分:1)

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

  1. 启用HAL模块。
  2. hal_json的{​​{1}}下启用Accepted request formats 那个特殊的资源。
  3. 然后,在您的/admin/config/services/rest请求中,使用标题:

    • POST
    • Content-Type: application/hal+json

    请求的X-CSRF-Token: [AUTH SESSION TOKEN]为:

    body

    Drupal正在从{ "_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."} ] } 字符串中读取实体类型和包。

    例如,如果您的实体类型为_links.type.href且您的捆绑包为automobile,则您的网址为car