Невозможно создать новый объект (созданный с помощью 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 ответ

Решение

У меня была такая же проблема, и вот как я ее решил:

  1. Включить модуль HAL.
  2. включить 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"

Другие вопросы по тегам