我在Symfony项目中编写控制器操作时遇到麻烦,应该返回数据(在这种特殊情况下是网上商店的订单)。是的......它是一种REST-API。这条路线只是从一些JavaScript中调用的。数据必须在客户端可视化。
问题:
我无法找到,为什么相关实体的序列化导致空对象。在此示例中,它是订单的用户,该订单为空。
这是一个示例输出:
orders: [
{
id: 2,
created: '2016-05-04T11:40:27+00:00',
user: {},
}
]
当我做
之类的事情时$orders = $this->getDoctrine()->getRepository('AppBundle:Order')
->findAllCompleted();
$serializationContext->setSerializeNull(true);
$serializationContext->setGroups(['statistics']);
$json = $serializer->serialize($orders, 'json', $serializationContext);
$response = new Response($json, $statusCode, [
'Content-Type' => 'application/json',
]);
return $response;
...我从服务器获得了一个很好的JSON响应,但是每个订单的每个相关实体,比如说user
都是{}
(空)。
即使我在相关实体被序列化之前就转储了它:
[...]
$myOrder = array_filter($orders, function($order) {
if ($order->getId() == 2) {
return true;
}
return false;
});
dump($myOrder[0]->getUser());
die();
...它导致一个空的(未水合的)实体。
但是,如果我将此调试代码更改为:
$myOrder = array_filter($orders, function($order) {
if ($order->getId() == 2) {
return true;
}
return false;
});
dump($myOrder[0]->getUser()->getUsername());
die();
...我得到一个清晰的输出(字符串),其中包含该实体的用户名值。
所以我认为问题是关于非水合实体,而不是序列化器或其错误的配置。
如何让JMSSerializer处理这些相关实体的水合作用?
我没有在文档中找到任何提示......
顺便说一下,这是订单和用户的JMS实体配置。AppBundle\Entity\User:
exclusion_policy: ALL
properties:
userMeta:
expose: true
address:
expose: true
username:
expose: true
email:
expose: true
isReseller:
expose: true
acceptPublicOrders:
expose: true
vatNumber:
expose: true
taxRate:
expose: true
AppBundle\Entity\Order:
exclusion_policy: NONE
properties:
id:
groups: ['statistics']
user:
groups: ['statistics']
configuration:
groups: ['statistics']
created:
groups: ['statistics']
invoiceItems:
groups: ['statistics']
exclude: true
答案 0 :(得分:0)
我认为您的问题是由学说延迟加载引起的,也许您可以尝试在订单实体中将用户关联的获取模式更改为EAGER
@ManyToOne(targetEntity =“Cart”,cascade = {“all”},fetch =“EAGER”)
默认情况下,我认为它不会获取关联,除非你像在这里一样直接调用它
转储($ myOrder [0] - >的getUser() - > getUsername());
如果您使用DQL,则为此 14.7.6.6。暂时更改DQL中的提取模式
编辑:我错了 我做了一些测试,所有工作都很好,延迟加载或渴望直到我尝试使用组,即使字段暴露你不使用默认组,所以它只采取与'统计'组的东西 尝试在此处添加默认组
$ serializationContext-> setGroups([ '缺省', '统计']);
或者在您为我工作的用户字段中添加统计组