$normalizer = new ObjectNormalizer();
// $normalizer->setCircularReferenceLimit(2);
$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$normalizer->setIgnoredAttributes(array('users', '__initializer__', '__cloner__', 'authkey', '__isInitialized__', "products"));
$serializer = new Serializer(array($normalizer), array(new JsonEncoder()));
return new JsonResponse($serializer->serialize($product, 'json'));
那是结果:
{
"id": 128,
"name": "product",
"price": 12,
"category": {
"id": 58,
"name": "category",
"company": {
"id": 1,
"name": "foo",
"tables": []
}
},
"description": "this is a product",
"company": {
"id": 1,
"name": "foo",
"tables": []
}
}
但是我如何获得以下结果:
{
"id": 128,
"name": "product",
"price": 12,
"category": {
"name": "category"
},
"description": "this is a product",
"company": {
"id": 1,
"name": "foo",
"tables": []
}
}
如何在两个值之间变化?
例如我要在这里
“类别”:{ “ name”:“ category”},
还提供了ID。
答案 0 :(得分:1)
看看串行器组件Attributes Groups。我相信这就是您想要的。
您可以选择每个特定响应中应包括哪些实体属性。
只需在实体中设置组
/**
* @Groups({"group1", "group2"})
*/
public $foo;
然后指定要序列化的组或组数组
$serializer = new Serializer(array($normalizer));
$data = $serializer->normalize($obj, null, array('groups' => 'group1'));
有时仅分组是不够的,也就是说,您可以使用Doctrine hydrator。这是一个稍微复杂的解决方案,但这为您提供了更多的可能性。
通常,当您需要进行简单选择时,将使用Attributes Groups
-检索一个特定实体或具有某些已连接实体的实体集合(也可将组用于连接)。 Doctrine hydrator
用于需要聚合选择的情况,例如从没有指定关系的表中检索数据,或将组合数据与常规数据一起添加。