Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何从实体更改序列化的输出?_Symfony_Symfony4_Serialization - Fatal编程技术网

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'));