2017-08-08 5 views
0

Voici ma situation: J'utilise le module ECK avec Drupal 8 pour créer des entités et des bundles, et le nouveau module de base REST pour créer des fonctionnalités API.Impossible de créer une nouvelle entité (créée avec ECK) via l'API en utilisant le module REST

J'ai installé le module REST_UI, et je permis à la route de l'entité que je suis intéressé par

Voilà mon problème. J'ai créé un type d'entité et un paquet avec ECK, et je peux ensuite créer une nouvelle entité quand je fais appel le point final /entity/entity_type_name avec une requête POST, donnant le paramètre suivant JSON:

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

Cependant, cela ne fonctionne que lorsque j'ai qu'un seul type d'entité dans ma liste d'entités; Disons par exemple que je décide de créer un nouveau type d'entité, puis exécutez la même requête, je reçu le message d'erreur suivant:

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

Je comprends que, apparemment, maintenant que je dispose de plusieurs types d'entités, l'API entité est incapable de comprendre quel devrait être le type de l'entité qu'il doit créer (ce que je trouve assez bizarre, étant donné que je le fournis dans l'URL sous ce formulaire /entity/entity_type_name et qu'il existe différentes routes disponibles pour les différents types d'entités qui J'ai).

Je suppose que je dois passer un paramètre supplémentaire dans mon json pour que Drupal comprenne quel type d'entité il devrait créer, mais quel serait ce paramètre? J'ai essayé de regarder en ligne et dans la documentation, mais je ne peux pas comprendre comment faire cela.

+0

Avez-vous une URL API à la liste des entités disponibles? Peut-être que vous pouvez identifier ce qui ne va pas comme ça – Fky

+0

Je vérifie les entités disponibles en utilisant l'interface d'administration ECK, il me donne leur nom de machine. – schankam

+0

pouvez-vous vider l'appel et revenir lorsque vous êtes dans l'interface d'administration? c'est pour voir comment ça se passe? – Fky

Répondre

1

J'ai eu le même problème, et voici comment je l'a résolu:

  1. activer le module HAL.
  2. Activez hal_json sous Accepted request formats dans /admin/config/services/rest pour cette ressource particulière.

Ensuite, dans votre demande POST, utilisez les en-têtes:

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

Et le body de l'être à la demande:

{ 
    "_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 lit le type d'entité et l'ensemble de la chaîne _links.type.href.

Par exemple, si votre type d'entité était automobile et votre paquet était car, votre URL serait "http://localhost:8080/rest/type/automobile/car"