【发布时间】:2017-12-04 14:37:54
【问题描述】:
我在我的 Symfony 2.7 网站中创建了一个自定义 Bundle。 其中一个实体完美运行:
- 实体类是 Version.php
- 自定义存储库是 VersionRepository
我的包的 MainController.php 是:
$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:Version');
$versions = $repository->findAll();
return $this->render('IpadUpdaterBundle:Version:index.html.twig', array(
'versions' => $versions
));
Twig 的输出非常完美:
- 我的第一个版本行
- 我的第二个版本行
但是...如果我想更改输出并使用相同的数据呈现 JSON 响应,我会在控制器中进行此更改:
$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:Version');
$versions = $repository->findAll();
$versions = json_encode($versions);
$rep_finale = new Response($versions);
$rep_finale->headers->set('Content-Type', 'application/json');
return $rep_finale;
或:
$repository = $this->getDoctrine()->getManager()->getRepository('MyBundle:Version');
$versions = $repository->findAll();
return new JsonResponse($versions);
.. 输出变成一个有 2 个孩子的空数组:
[{},{}]
!我不明白出了什么问题以及我将实施哪些更改来解决此问题。我已经在我的 controller.php 的标头中使用了“use Symfony\Component\HttpFoundation\Response”和“use Symfony\Component\HttpFoundation\JsonResponse”。
感谢您的帮助!
【问题讨论】:
-
您需要告诉 json_encode 您的对象的哪些数据要序列化。你实际上有很多选择:使用 JMSSerializerBundle 和这个库提供的注解,构建你自己的序列化器(symfony.com/doc/current/components/serializer.html)或者为你的实体实现最简单的 JsonSerializable(stackoverflow.com/questions/47335932/…)。
-
正如@ASOlivieri 所建议的,我成功地尝试了 JMS。感谢您的提示!
标签: symfony doctrine-orm