У меня проблема с сериализацией объекта со многими отношениями с использованием групп. У меня проблема с сериализацией связанных сущностей таким образом.
Допустим, у меня есть две сущности: продукт и связанный с ним элемент.
/**
*
* @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;
...
}
Сущность элемента имеет аналогичную структуру:
/**
*
* @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;
...
}
Моя проблема заключается в том, что когда я сериализую продукт с групповым объектом «детали», я хочу сериализовать только идентификаторы элементов, но, как вы видите, объект определил те же группы, что и продукт (в случае, если мне понадобятся сведения об объекте элемента), потому что я хочу иметь унифицированные группы для всех моих объектов и предотвратить создание сотен групп, таких как «product_details», «element_details» и т. д.
Есть ли способ в конечном итоге изменить группу сериализации, когда я посещаю отношение или что-то в этом роде? Может обработчик или что-то в этом роде?
С уважением и благодарностью за любую помощь
product_detail
/product_list
и т. д., и это было довольно приятно, потому что у вас всегда есть полный контроль над сериализацией. Недостатком, очевидно, является то, насколько многословным становится код при сериализации нескольких классов... Я бы также использовалxxx_partial
/xxx_full
вместоxxx_list
/xxx_details
. - person AdrienBrault   schedule 05.10.2012