JMSSerializerでアノテーショングループを検討することは、その仕事をしてDoctrineのオブジェクトコンストラクタが付属していますが、主キーを形成する2つのプロパティを持つエンティティを想像:どのようObjectConstructor
UserBase
prop annotated with @ORM\Id and @Serializer\Groups({"1"})
- username
prop annotated with @ORM\Id and @Serializer\Groups({"2"})
- email
User extends UserBase
- other props here, no Id defined.
つのプロパティキーがgroup=1
を使用することによって除外されていますデシリアライズしながらクライアントはまだemail
とusername
の両方を送信する可能性があります。 email
は考慮する必要はありません。あなたは、本体に2つのプロパティを渡す場合
残念ながら、2つの値に応じて、何かが直列化復元によって除外されている場合DoctrineObjectConstructor
はチェックしませんので、DBからエンティティをロードしよう:
foreach ($classMetadata->getIdentifierFieldNames() as $name) {
if (! array_key_exists($name, $data)) {
return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context);
}
$identifierList[$name] = $data[$name];
}
私がしたいのは、注釈付きグループを考慮に入れているため、識別子を構成するいくつかのプロパティがない場合にfallbackConstructor
を使用することです。
これは良い点です:annotationDriver
を渡して私自身のサービスを作りました。次に、識別子を形成する性質が実際のグループに関連付けられていない場合:私は身体
でそのプロパティを渡さなかったかのよう
$classMetadata = $this->annotationDriver->loadMetadataForClass($metadata->reflection);
$classMetadata->properties //here groups are listed for each property
私は、fallbackConstructor
にフォールバックすることができません...非常に高速!私の団体User
はUserBase
であり、私のすべての識別子はどこにあるのかわからないので、アカウント階層を考慮する必要があります。
ヒント?