我正在尝试使用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']