API Platform: “Valor no esperado de tipo no objeto para propiedad de objeto.”
Estoy intentando usar la serialización de API Platform con un campo calculado como se muestra aquí https://api-platform.com/docs/core/serialization/#calculated-field
Aquí está el código
/**
* @Groups({
* "read:actionJeu"
* })
*/
public function getTimePassed(){
return 4;
}
El contexto de normalización es normalizationContext={"groups"={"read:actionJeu"}, "enable_max_depth"=true}
El problema es que cuando hago return 4
, muestra este error
Pero cuando cambio el retorno a algo diferente (por ejemplo, return new \DateTime('now')
), funciona.
Me pregunto por qué está sucediendo esto, también lo intenté con una cadena, pero no funciona.
davy.ai
Según la documentación de la Plataforma de API sobre campos calculados, se sugiere devolver un objeto en lugar de un valor escalar para los campos calculados. Esto se debe a que API Platform utiliza el componente Symfony Serializer, que no admite la serialización de valores escalares directamente.
Por lo tanto, en el ejemplo de código proporcionado, cuando se devuelve el valor entero
4
, el serializador genera un error porque no puede serializarlo. Sin embargo, cuando se devuelve un objeto DateTime que se puede serializar, funciona correctamente.Para resolver este problema, puedes crear un objeto de valor o una clase DTO (Objeto de Transferencia de Datos) que envuelva el valor escalar calculado en un objeto y devuelva ese objeto en su lugar. De esta manera, el serializador puede manejar el objeto y serializarlo correctamente.
Por ejemplo,
En el ejemplo de código anterior, hemos creado una clase
TiempoTranscurrido
que envuelve el valor escalar calculado4
en un objeto. Luego, devolvemos este objeto desde el métodogetTiempoTranscurrido
. Ahora, el serializador puede serializar este objeto y devolver la respuesta correcta.