Ho un problema con serializzazione di entità con molte relazioni utilizzando gruppi. Ho un problema con la serializzazione di entità correlate in questo modo.Gruppi di serializzazione JMSSerializerBundle in entità con relazioni
Diciamo che ho due entità: Prodotto e Elemento correlato.
/**
*
* @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;
...
}
Elemento entità ha una struttura simile:
/**
*
* @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;
...
}
mio problema è che quando sto serializzazione del prodotto con entità del gruppo 'dettagli' Voglio serializzare solo id di elementi, ma come vedete entità ha definito gli stessi gruppi come Prodotto (nel caso in cui avessi bisogno di dettagli dell'oggetto elemento) perché voglio avere gruppi unificati su tutte le mie entità e impedire di creare centinaia di gruppi come 'product_details', 'element_details' e così via.
C'è un modo per cambiare seriamente il gruppo di serializzazione quando visito una relazione o qualcosa del genere? Forse un handler o qualcosa del genere?
Saluti e grazie per tutto l'aiuto
Ho usato il product_list' ecc soluzione 'product_detail' /', e è stato molto carino, perché hai sempre il pieno controllo di ciò che è serializzato. Il rovescio della medaglia è ovviamente il modo prolisso il codice ottiene durante la serializzazione più classi ... mi piacerebbe anche usare 'xxx_partial' /' xxx_full', invece di 'xxx_list' /' xxx_details'. – AdrienBrault
@AdrienBrault Grazie per la risposta.Sì, sto usando questa soluzione in questo momento ma ha uno svantaggio - che i gruppi devono essere definiti in ogni entità correlata nel caso in cui io abbia molte molte entità in uso comuni dizionari gruppi di entità l'annotazione sarà enorme – mrMantir
Questo è [VirtualProperty] (http://jmsyst.com/libs/serializer/master/reference/annotations#virtualproperty)? –