Problem/Motivation
Hello! I have two websites. I am trying to create a custom entity with a standard metatag field using JSON API POST request called from one site (the source) to the other (the endpoint). Both have the same "coh_event" node with the same exact structure. Everything works except I cannot get the metatags of the coh_event entity to be created using the POST request
Steps to reproduce
I have a custom entity named coh_event, with a standard metatag field named field_coh_metatag
From the source drupal site, I am calling POST on localclient.local to create a coh_event using the json api
$this->httpClient->request('POST', 'localclient.local/jsonapi/node/coh_event', [
'json' => $data, 'auth' => ... , 'headers' => ...]);
The $data is an array in json format. For readability, i've reproduced it in json format:
{
"data": {
"type": "node--coh_event",
"attributes": {
"field_coh_metatag": [
{
"tag": "meta",
"attributes": {
"name": "abstract",
"content": "Test abstract"
}
}
],
"field_coh_body": {
"value": "Test body",
"format": "az_standard"
},
"field_coh_event_date": [
{
"value": "2023-07-12T21:00:00+00:00",
"end_value": "2023-07-12T22:00:00+00:00",
"timezone": ""
}
...
}
Proposed resolution
I've tried installing patches (specifically Patch 172 and Patch 61) from here:
https://www.drupal.org/project/metatag/issues/2945817
π
Support JSON API, REST, GraphQL and custom normalizations via new computed field
Fixed
-> the focus of that issue seems to make Json API spit out the metatag in the correct format, but it doesn't say anything about POST request and creating entities with metatags
I've tried putting the metatag information in the actual "metatag" attribute in the json $data as well as in the "metatag_normalized" attribute (made available by the patches above) to no avail.
I've tried serializing like shown in this link: https://drupal.stackexchange.com/questions/230906/how-do-i-add-a-meta-ta...
-> I get this error: 500 Internal Server Error: The generic FieldItemNormalizer cannot denormalize string values for "value" properties of the "field_coh_metatag" field (field item class: Drupal\metatag\Plugin\Field\FieldType\MetatagFieldItem).
-> My code is:
$data['attributes']['field_coh_metatag'] = array(
0 => array('value' => serialize([
'abstract' => 'test',
'geo.region' => 'US-AZ',
'content-language' => 'en',
]))
);
TLDR
I want to know if it is possible to create a custom entity with a metatag field using a POST request via JSON API and if it is, what the right format for the body data should be to accomplish this. Much thanks in advance!!