JMSSerializer自帶主義Object構造函數,做自己的工作,但是想象一下,一個實體的兩個屬性形成一個主鍵:如何考慮註記組在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
。
不幸的是,如果你的身體傳遞兩個屬性,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
,我的所有標識符都是這樣,所以我應該考慮層次結構,可能是以一種通用的方式。
任何提示?