使用symfony序列化程序进行序列化不正确

时间:2017-06-05 12:15:16

标签: symfony serialization

我正在尝试使用symfony / serializer将我的实体序列化为json。 我希望得到像

这样的东西
  {
    "id" : "string",
    "name" : "name here",
    "admin": "admin_id"
  }

但我总是以完整的树结束 - 结果json包含所有相关实体及其关系。我相信使用symfony / serializer一定是一项微不足道的任务,显然做错了什么,但是什么?

CarbonNormalizer只返回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 Domain\Cpa\Models;


use Domain\Offer\Models\CpaOffer;
use Domain\User\Models\User;
use Ramsey\Uuid\Uuid;

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

Domain\Cpa\Models\Cpa:
 attributes:
   id:
    groups: ['show']
   name:
    groups: ['show']
   admin:
    groups: ['show']

1 个答案:

答案 0 :(得分:0)

要使用群组,您还需要初始化ClassMetadataFactory

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

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

'Domain\Cpa\Models\Cpa':
  attributes:
    id:
      groups: ['show']
    name:
      groups: ['show']
    admin:
      groups: ['show']