使用Symfony Serialialser的序列化不正确



我正在尝试使用Symfony/Serialializer序列将我的实体序列化为JSON。我想得到

之类的东西
  {
    "id" : "string",
    "name" : "name here",
    "admin": "admin_id"
  }

,但我总是最终得到完整的树 - 由此产生的JSON包含与它们的关系的所有相关实体。我相信,与Symfony/Serialializer有关,显然做错了什么,但是什么?

碳质化器简单地返回NESBOT/CARBON对象的字符串表示。

这是我的控制器:

    $data=$this->em->getRepository('Cpa:Cpa')->findAll();
    $encoder = new JsonEncoder();
    $normalizer = new GetSetMethodNormalizer();//object -same
    $dateTimeNormalizer = new CarbonNormalizer();
    $normalizer->setCircularReferenceHandler(function ($object) {
        return $object->getId();
    });
    $this->serializer = new Serializer([$dateTimeNormalizer, $normalizer], [$encoder]);
    $data = $this->serializer->serialize($data, 'json', ['groups' => ['show'], 'enable_max_depth' => true]);
    return new JsonResponse($data, $code, [], true);

和我的实体:

<?php
namespace DomainCpaModels;

use DomainOfferModelsCpaOffer;
use DomainUserModelsUser;
use RamseyUuidUuid;
class Cpa
{
/** @var  string */
private $id;
/** @var  string */
private $name;
/** @var  User */
private $admin;
/** @var  CpaOffer[] */
private $offers;
/**
 * Cpa constructor.
 * @param string $name
 * @param User $admin
 */
public function __construct($name, User $admin)
{
    $this->id = Uuid::uuid4()->toString();
    $this->name = $name;
    $this->admin = $admin;
    $this->offers = [];
}
/**
 * @return string
 */
public function getId(): string
{
    return $this->id;
}
/**
 * @return string
 */
public function getName(): string
{
    return $this->name;
}
/**
 * @return User
 */
public function getAdmin(): User
{
    return $this->admin;
}
/**
 * @return CpaOffer[]
 */
public function getOffers()//: array
{
    return $this->offers;
}

}

serialization.yml

DomainCpaModelsCpa:
 attributes:
   id:
    groups: ['show']
   name:
    groups: ['show']
   admin:
    groups: ['show']

要使用组,您也需要初始化ClassMetadataFactory

// Don't forget to add the new use statements
// ...
$normalizer = new GetSetMethodNormalizer(
  new ClassMetadataFactory(
    new YamlFileLoader('/the/path/to/yourfile.yaml')
  )
);
// ...

您还必须修复yaml文件的缩进:

'DomainCpaModelsCpa':
  attributes:
    id:
      groups: ['show']
    name:
      groups: ['show']
    admin:
      groups: ['show']

最新更新