Symfony4。我有两个实体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()的字符串或对象,并给出“数组”。
答案 0 :(得分:1)
您可以使用Symfony序列化器组件:
答案 1 :(得分:1)
好吧,方法$ this-> json返回一个JsonResponse,因此整个东西返回一个JsonResponse(JsonResponse ...)-source
public function index()
{
...
return $this->json(['cats' => $cats, 'dogs' => $dogs], 200, [], ['groups' => ['cats', 'dogs']]);
}