Невозможно создать новый объект (созданный с помощью ECK) через API с помощью модуля REST
Вот моя ситуация: я использую модуль ECK с Drupal 8 для создания сущностей и пакетов, и новый основной модуль REST для создания функций API.
Я установил модуль REST_UI и включил маршрут для объекта, который меня интересует.
Вот моя проблема: я создал тип сущности и связку с ECK, и тогда я могу создать новую сущность, когда я вызываю /entity/entity_type_name
конечная точка с запросом POST, в котором в качестве 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, чтобы понять, какую сущность он должен создать, но что это за параметр? Я пытался смотреть онлайн и в документации, но я не могу понять, как это сделать.
1 ответ
У меня была такая же проблема, и вот как я ее решил:
- Включить модуль HAL.
- включить
hal_json
подAccepted request formats
в/admin/config/services/rest
для этого конкретного ресурса.
Тогда в вашем 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"