无法通过 API 使用 REST 模块创建新实体(使用 ECK 创建)
Cannot create a new entity (created with ECK) through API using REST module
这是我的情况:我在 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
我明白,显然,现在我有多个实体类型,实体 API 无法理解它必须创建的实体类型应该是什么(我觉得这很奇怪,考虑到我在 URL 中以这种形式 /entity/entity_type_name
提供它,并且有不同的路线可用于我拥有的不同类型的实体)。
我想我需要在我的 json 中传递一个额外的参数,以便 Drupal 了解它应该创建什么样的实体,但是这个参数是什么?我一直在尝试在线查看文档,但我不知道该怎么做。
我遇到了同样的问题,我是这样解决的:
- 启用 HAL 模块。
- 在
/admin/config/services/rest
中的 Accepted request formats
下启用 hal_json
该特定资源。
然后,在您的 POST
请求中,使用 headers:
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"
这是我的情况:我在 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
我明白,显然,现在我有多个实体类型,实体 API 无法理解它必须创建的实体类型应该是什么(我觉得这很奇怪,考虑到我在 URL 中以这种形式 /entity/entity_type_name
提供它,并且有不同的路线可用于我拥有的不同类型的实体)。
我想我需要在我的 json 中传递一个额外的参数,以便 Drupal 了解它应该创建什么样的实体,但是这个参数是什么?我一直在尝试在线查看文档,但我不知道该怎么做。
我遇到了同样的问题,我是这样解决的:
- 启用 HAL 模块。
- 在
/admin/config/services/rest
中的Accepted request formats
下启用hal_json
该特定资源。
然后,在您的 POST
请求中,使用 headers:
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"