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
,我的所有标识符都是这样,所以我应该考虑层次结构,可能是以一种通用的方式。
任何提示?