Estoy tratando de serializar y luego deserializar una Entidad Doctrine en Symfony 3. Bueno, por supuesto, no funciona para la propiedad id porque no hay acceso público a la id por defecto. Entonces, ¿cuál es la mejor opción para eso?
Agregue un método setId() , pero probablemente sea una mala idea y socave el comportamiento predeterminado de la doctrina.
Use un Normalizer personalizado que use la reflexión para construir el objeto simplemente accediendo al campo.
Proporcione a la entidad alguna funcionalidad personalizada toArray() , fromArray() y use los valores de la matriz en lugar del objeto en la serialización.
¿O me estoy perdiendo algo? ¿Ya hay algo integrado en Symfony para ese caso de uso?
Puede usar la opción object_to_populate para hacer eso:
// retrieve entity to update from DB $oldProduct = $this->getDoctrine()->getRepository(Product::class)->find($request->request->get('id')); $product = $this->get('serializer')->deserialize($request->getContent(), Product::class, 'json', array('object_to_populate' => $oldProduct)); $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($product); $entityManager->flush();Consulte la documentación de Deserializar en un objeto existente.