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