Tengo un problema con la serialización de entidades con muchas relaciones usando grupos. Tengo un problema con la serialización de entidades relacionadas de esta manera.JMSSerializerBundle grupos de serialización en entidades con relaciones
Digamos que tengo dos entidades: Producto y Elemento relacionado.
/**
*
* @Serializer\ExclusionPolicy("none")
*/
class Product {
/**
* Primary key
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @Serializer\Groups({"list","details"})
* @Serializer\Type("integer")
*/
protected $id;
/**
* @Serializer\Groups({"list","details"})
* @Serializer\Type("string")
*/
protected $name;
/**
* @ORM\Column(name="description", type="string", length=4096, nullable=true)
*
* @Serializer\Groups({"details"})
* @Serializer\Type("string")
*/
protected $description;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Madden\ProjectBundle\Entity\ProjectResource", mappedBy="project")
* @Serializer\Groups({"details"})
* @Serializer\Type("ArrayCollection<Element>")
*/
protected $details1;
/**
* Relation to project tasks
* @ORM\OneToMany(targetEntity="Madden\ProjectBundle\Entity\ProjectTask", mappedBy="project")
* @Serializer\Exclude()
* @Serializer\Type("ArrayCollection<Element>")
*/
protected $details2;
...
}
entidad Element tiene una estructura similar:
/**
*
* @Serializer\ExclusionPolicy("none")
*/
class Element {
/**
* Primary key
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @Serializer\Groups({"list","details"})
* @Serializer\Type("integer")
*/
protected $id;
/**
* @Serializer\Groups({"list","details"})
* @Serializer\Type("string")
*/
protected $name;
/**
* @ORM\Column(name="description", type="string", length=4096, nullable=true)
*
* @Serializer\Groups({"details"})
* @Serializer\Type("string")
*/
protected $description;
...
}
Mi problema es que cuando estoy serialización del producto con entidad del grupo 'detalles' quiero serializar sólo identificadores de elementos, pero como ves entidad ha definido los mismos grupos como Producto (en caso de que necesite detalles del objeto del elemento) porque quiero tener grupos unificados en todas mis entidades y evitar hacer cientos de grupos como 'detalles del producto', 'detalles del elemento', y así sucesivamente.
¿Hay alguna manera de eventualmente cambiar el grupo de serialización cuando visito una relación o algo así? ¿Manipulador tal vez o algo así?
Un saludo y gracias por cualquier ayuda
He utilizado el 'product_detail' /' solución product_list' etc, y fue muy agradable, porque siempre tienes control total de lo que se serializa. La desventaja es obviamente cuán detallado es el código al serializar múltiples clases ... También usaría 'xxx_partial' /' xxx_full', en lugar de 'xxx_list' /' xxx_details'. – AdrienBrault
@AdrienBrault Gracias por responder.Sí, estoy usando esa solución en este momento, pero tiene una desventaja: los grupos deben definirse en cada entidad relacionada en caso de que tenga muchas entidades en común. La anotación de los grupos de entidades de diccionarios será enorme – mrMantir
Eso es sobre [VirtualProperty] (http://jmsyst.com/libs/serializer/master/reference/annotations#virtualproperty)? –