Symfony 如何从实体更改序列化的输出?
结果是:Symfony 如何从实体更改序列化的输出?,symfony,symfony4,serialization,Symfony,Symfony4,Serialization,结果是: $normalizer = new ObjectNormalizer(); // $normalizer->setCircularReferenceLimit(2); $normalizer->setCircularReferenceHandler(function ($object) { return $object->getId(); }); $normalizer->setIgnoredAttributes(array('us
$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。查看序列化程序组件。我相信这就是你要找的 您可以选择每个特定响应中应包含哪些实体属性 只需在实体中设置组
{
"id": 128,
"name": "product",
"price": 12,
"category": {
"name": "category"
},
"description": "this is a product",
"company": {
"id": 1,
"name": "foo",
"tables": []
}
}
然后指定要序列化的组或组数组
/**
* @Groups({"group1", "group2"})
*/
public $foo;
有时候仅仅分组是不够的,那是你可以使用的时候。这是一个稍微复杂一点的解决方案,但这给了您更多的可能性
通常,当您需要进行简单的选择时,您会使用属性组
——检索一个特定实体或具有一些连接实体的实体集合(也使用组进行连接)<代码>或用于需要聚合选择时,例如从没有指定关系的表中检索数据,或添加组合数据和常规数据
$serializer = new Serializer(array($normalizer));
$data = $serializer->normalize($obj, null, array('groups' => 'group1'));