【发布时间】:2019-04-10 13:42:57
【问题描述】:
Symfony 4. 我有 2 个实体,Cat 和 Dog,它们需要被序列化,然后作为 JSON 响应返回,如下所示:
{
'cats': // array of serialized cat data
'dogs': // array of serialized dog data
}
这是我目前所拥有的:
控制器:
public function index()
{
$repository = $this->getDoctrine()->getRepository(Cat::class);
$cats = $repository->findAll();
$repository = $this->getDoctrine()->getRepository(Dog::class);
$dogs = $repository->findAll();
return new JsonResponse([
'cats' => $this->serializeData($cats, 'cats'),
'dogs' => $this->serializeData($dogs, 'dogs'),
], 200);
}
而我的serializeData 方法如下所示:
protected function serializeData($data, $group)
{
return $this->json($data, $this->statusCode, [], [
'groups' => [$group]
]);
}
这是Cat 实体的一点点:
use Symfony\Component\Serializer\Annotation\Groups;
[...]
/**
* @ORM\Entity(repositoryClass="App\Repository\CatRepository")
*/
class Cat
{
[...]
/**
* @ORM\Column(type="string", length=255)
* @Groups("cats")
*/
private $name;
[...]
}
问题:当到达这个端点时,而不是我得到的数据:
{
"cats": {
"headers": {}
},
"dogs": {
"headers": {}
}
}
headers 不属于任一实体。
编辑:
我还尝试了什么:
public function index()
{
$repository = $this->getDoctrine()->getRepository(Cat::class);
$cats = $repository->findAll();
$repository = $this->getDoctrine()->getRepository(Dog::class);
$dogs = $repository->findAll();
return new JsonResponse([
'cats' => $this->container->get('serializer')->serialize($cats, 'json', [
'groups' => ['cats'],
])
'dogs' => $this->container->get('serializer')->serialize($dogs, 'json', [
'groups' => ['dogs'],
])
], 200);
}
这种工作,但new JsonResponse 序列化已经序列化的猫和狗。当然,如果我将 new JsonResponse 替换为 new Response 我会得到错误
响应内容必须是实现__toString()的字符串或对象,给定“数组”。
【问题讨论】:
标签: php symfony serialization