在调用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
之前是否有可以执行的预步骤?
发布于 2015-09-17 05:05:04
请检查here,看看确切的getReference
是什么。
没有办法让
getReference()
检查数据库是否存在所引用的对象。
如果您想要进行反分区,则必须使用$em->getRepository('\Entity\Foo')->find($foo)
https://stackoverflow.com/questions/31381492
复制相似问题