Working in a vuejs app with axios I have some data structured as follow:
{
...
surgeries: [],//array of object
patientDiseases: [
{
date: a javascrtipt date,
disease: /api/diseases/#id //This is a valid IRI provided by the api in a select
}
] //array of object
}
When I post this data set api-platform's response is Invalid value provided (invalid IRI?)
Here is the stack trace
{
"@context": "\/api\/contexts\/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "Invalid value provided (invalid IRI?).",
"trace": [{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 177,
"args": []
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "AbstractItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\AbstractItemNormalizer",
"type": "-\u003E",
"function": "setAttributeValue",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Normalizer\\AbstractObjectNormalizer.php",
"line": 261,
"args": [
["object", "App\\Entity\\Disease"],
["integer", 0],
["string", "\/api\/diseases\/4"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer\\Normalizer",
"short_class": "AbstractObjectNormalizer",
"class": "Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 132,
"args": [
["string", "\/api\/diseases\/4"],
["string", "App\\Entity\\Disease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "AbstractItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\AbstractItemNormalizer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\ItemNormalizer.php",
"line": 43,
"args": [
["string", "\/api\/diseases\/4"],
["string", "App\\Entity\\Disease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "ItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\ItemNormalizer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Serializer.php",
"line": 177,
"args": [
["string", "\/api\/diseases\/4"],
["string", "App\\Entity\\Disease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer",
"short_class": "Serializer",
"class": "Symfony\\Component\\Serializer\\Serializer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Normalizer\\AbstractObjectNormalizer.php",
"line": 334,
"args": [
["string", "\/api\/diseases\/4"],
["string", "App\\Entity\\Disease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer\\Normalizer",
"short_class": "AbstractObjectNormalizer",
"class": "Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer",
"type": "-\u003E",
"function": "validateAndDenormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Normalizer\\AbstractObjectNormalizer.php",
"line": 259,
"args": [
["string", "App\\Entity\\PatientDisease"],
["string", "disease"],
["string", "\/api\/diseases\/4"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer\\Normalizer",
"short_class": "AbstractObjectNormalizer",
"class": "Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Serializer.php",
"line": 177,
"args": [
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}],
["string", "App\\Entity\\PatientDisease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer",
"short_class": "Serializer",
"class": "Symfony\\Component\\Serializer\\Serializer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 307,
"args": [
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}],
["string", "App\\Entity\\PatientDisease"],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "AbstractItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\AbstractItemNormalizer",
"type": "-\u003E",
"function": "denormalizeRelation",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 272,
"args": [
["string", "patientDiseases"],
["object", "ApiPlatform\\Core\\Metadata\\Property\\PropertyMetadata"],
["string", "App\\Entity\\PatientDisease"],
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", true],
"resource_class": ["string", "App\\Entity\\PatientDisease"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "AbstractItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\AbstractItemNormalizer",
"type": "-\u003E",
"function": "denormalizeCollection",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 204,
"args": [
["string", "patientDiseases"],
["object", "ApiPlatform\\Core\\Metadata\\Property\\PropertyMetadata"],
["object", "Symfony\\Component\\PropertyInfo\\Type"],
["string", "App\\Entity\\PatientDisease"],
["array", [
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}]
]],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", false],
"resource_class": ["string", "App\\Entity\\Patient"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "ApiPlatform\\Core\\Serializer",
"short_class": "AbstractItemNormalizer",
"class": "ApiPlatform\\Core\\Serializer\\AbstractItemNormalizer",
"type": "-\u003E",
"function": "setAttributeValue",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\symfony\\serializer\\Normalizer\\AbstractObjectNormalizer.php",
"line": 261,
"args": [
["object", "App\\Entity\\Patient"],
["string", "patientDiseases"],
["array", [
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}]
]],
["string", "json"],
["array", {
"groups": ["array", [
["string", "patient"]
]],
"collection_operation_name": ["string", "post"],
"operation_type": ["string", "collection"],
"api_allow_update": ["boolean", false],
"resource_class": ["string", "App\\Entity\\Patient"],
"request_uri": ["string", "\/api\/patients"],
"uri": ["string", "http:\/\/localhost:8000\/api\/patients"],
"api_denormalize": ["boolean", true],
"cache_key": ["string", "e83f0aaf1c78a8d5386bc220724081e1"]
}]
]
}, {
"namespace": "Symfony\\Component\\Serializer\\Normalizer",
"short_class": "AbstractObjectNormalizer",
"class": "Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer",
"type": "-\u003E",
"function": "denormalize",
"file": "G:\\6.programacion\\from git\\Veterinaria\\vendor\\api-platform\\core\\src\\Serializer\\AbstractItemNormalizer.php",
"line": 132,
"args": [
["array", {
"name": ["string", "perro"],
"age": ["integer", 8],
"specie": ["string", "\/api\/species\/1"],
"breed": ["string", "\/api\/breeds\/1"],
"birthdate": ["string", "2018-11-07T13:03:00.000Z"],
"entrydate": ["string", "2018-11-23T13:03:03.182Z"],
"gender": ["string", "\/api\/genders\/1"],
"temperament": ["string", "\/api\/temperaments\/1"],
"chip": ["string", "asdasd2asd"],
"coatType": ["string", "\/api\/coat_types\/1"],
"coatColor": ["string", "\/api\/coat_colors\/1"],
"details": ["string", "m.cxvczxjkcxzvjklczv"],
"status": ["string", "\/api\/status_patients\/1"],
"client": ["array", {
"name": ["string", "Juan"],
"lastName": ["string", "Alberto"],
"secondSurname": ["string", "Asdasd"],
"email": ["string", "[email protected]"],
"phone1": ["string", "234234"],
"phone2": ["string", "24234"],
"clientType": ["string", "\/api\/client_types\/1"],
"sector": ["string", "\/api\/sectors\/1"],
"identificationCard": ["string", "98989898989"],
"address": ["string", "sdfsdfsdfs sdf sd5f sd"]
}],
"isActive": ["boolean", true],
"surgeries": ["array", [
["array", {
"name": ["string", "sdfa fsdf"],
"date": ["string", "2018-11-30T13:03:00.000Z"],
"patient": ["array", []]
}],
["array", {
"name": ["string", "sdfa fsdf"],
"date": ["string", "2018-11-30T13:03:00.000Z"],
"patient": ["array", []]
}],
["array", {
"name": ["string", "sdfa fsdf"],
"date": ["string", "2018-11-30T13:03:00.000Z"],
"patient": ["array", []]
}],
["array", {
"name": ["string", "sdfa fsdf"],
"date": ["string", "2018-11-30T13:03:00.000Z"],
"patient": ["array", []]
}]
]],
"patientDiseases": ["array", [
["array", {
"patient": ["array", []],
"date": ["string", "2018-11-27T13:03:00.000Z"],
"disease": ["string", "\/api\/diseases\/4"]
}]
]]
}],
["string", "App\\Entity\\Patient"],
["string", "json"],
As you can see the IRI is present in the request in every object of the array but api-platform still raising an error of Invalid IRI.
The entities are configured with cascade persist option
Do you have any advice on how could I resolve this situation?
Thanks in advance
have you been able to find the reason of this behaviour? I am just facing probably the same issue.
If (in your example)
surgeries
is ManyToMany relation, you can easily use IRI and Entity gets created. IfpatientDiseases
is OneToMany (in fact it is ManyToMany too, but with extra attributes), using of IRI inside of object collection returns Exception above. And the object normalization looks weird:After many attempts I have been able to find just a workaround. The entity with expected name here
PatientDisease
has to be defined as ApiResource with at least mandatory GET itemOperation (which can be easily a dummy controller returning always "not found"). Then ApiPlatform probably understands better the format of object collection and new embedded entity gets successfully created.I do not know whether this is an expected behaviour or a bug. But I hope this may help also others :-)