【发布时间】:2017-06-05 12:15:16
【问题描述】:
我正在尝试使用 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;
}
}
序列化.yml
Domain\Cpa\Models\Cpa:
attributes:
id:
groups: ['show']
name:
groups: ['show']
admin:
groups: ['show']
【问题讨论】:
标签: symfony serialization