グループを使用して多数のリレーションを持つエンティティをシリアル化する際に問題があります。 このように、関連するエンティティのシリアル化に問題があります。リレーションを持つエンティティのJMSSerializerBundleシリアル化グループ
私は2つのエンティティを持っているとしましょう:製品と関連要素。
/**
*
* @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;
...
}
私の問題は、私は「詳細」グループのエンティティで製品をシリアライズだとき、私は元素の唯一のIDをシリアライズしたいということですが、あなたはエンティティを見るようにすべてのエンティティに統一されたグループを持ち、 'product_details'、 'element_details'などの何百ものグループを作成しないようにするため、Productと同じグループを定義しました(要素オブジェクトの詳細が必要な場合)。
私はリレーションやそのようなものを訪問するときにシリアル化グループを最終的に変更する方法はありますか?ハンドラーは多分かそのようなものですか?
...より柔軟な、より少ない冗長、保守が容易、かつ:@aferberによって提案された解決策は、多くの点で優れているようだ言われていること
それはあなたが常に直列化されているものを完全に制御できるので、かなり素晴らしかったです。欠点は、明らかに、複数のクラスを直列化するときにコードがどれほど冗長であるかです。私は 'xxx_list' /' xxx_details'の代わりに 'xxx_partial' /' xxx_full'も使用します。 – AdrienBrault
@AdrienBrault返信ありがとうございます。はい、私はそのソリューションを今使っていますが、それは欠点があります。つまり、多くのエンティティが共通のエンティティ辞書を持っている場合、グループをすべての関連エンティティで定義する必要があります。エンティティグループのアノテーションは巨大になります – mrMantir
[VirtualProperty] /jmsyst.com/libs/serializer/master/reference/annotations#virtualproperty)? –