是否可以在setCallbacks
上使用Symfony\Component\Serializer\Normalizer\ObjectNormalizer
,在调用Symfony\Component\Serializer\Serializer.deserialize()
时将调整后的标准值转换回对象时调用?
我知道反向是可能的,因为在调用Symfony\Component\Serializer\Serializer.serialize()
时可以对对象进行规范化。我只是不知道如何进行反向归一化。
setCallbacks
将Foo
转换为Id
的实体的序列化示例:
$encoder = new JsonEncoder();
$normalizer = new ObjectNormalizer();
$normalizer->setCallbacks(array(
'foo' => function ($foo) {
return $foo instanceof Foo
? $foo->getId()
: null;
},
));
$serializer = new Serializer(array($normalizer), array($encoder));
$json = $serializer->serialize($entity, 'json');
我想做的反面:
$em = static::getEntityManager();
$encoder = new JsonEncoder();
$normalizer = new ObjectNormalizer();
$normalizer->setCallbacks(array(
'foo' => function ($foo) use($em) {
return !is_null($foo)
? $em->getReference('\Entity\Foo', $foo)
: null;
},
));
$serializer = new Serializer(array($normalizer), array($encoder));
return $serializer->deserialize($entity, $classname, 'json');
我得到的错误:
Catchable fatal error: Argument 1 passed to \Entity\Bar::setFoo() must be an instance of \Entity\Foo, integer given
或者是否可以在deserialize
之前执行预备步骤?
答案 0 :(得分:-1)
请检查here,看看确切的getReference
。
无法使
getReference()
检查数据库是否存在引用的对象。
如果您想要实现deserealize,则必须使用$em->getRepository('\Entity\Foo')->find($foo)