我正在尝试检索所有记录并将其显示在JSON文件中。
我的当前函数检索属于特定用户的所有事件。
/**
* create json files from doctrine/mongo
* @Route("/createjson", name="createjson")
*/
public function createJson()
{
// check user authentication
$this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
$dm = $this->get('doctrine_mongodb')->getManager();
$repository = $dm->getRepository('AppBundle:Event');
$events = $repository->findBy(array('user' => $this->getUser()));
$serializer = SerializerBuilder::create()->build();
$result = $serializer->deserialize($events, 'AppBundle\Document\Event', 'json');
var_dump($result);
exit;
}
这不起作用,因为传递给序列化程序的一些元素是数组格式。我得到的错误。
Warning: json_decode() expects parameter 1 to be string, array given
500 Internal Server Error - ContextErrorException
但是,如果我使用内置的Symfony Serializer,它可以正常工作:
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($events, 'json');
return new Response($reports);
然而,要生成的JSON将与我的Document / Entity不同,因此我想/需要使用JMSSerializerBundle。
例如,记录如下所示:
[{
"id": "572041b3288b560e5e00451c",
"name": "Test",
"date": "2016-04-27T05:25:00+1000",
"enddate": "2016-04-30T11:55:00+1000",
"location": {
"name": "Sydney, NSW"
},
"key": {
"id": "1g43g34g34g23f32g32G32gGSDF"
},
"user": {
"id": "57203174288b560e5e0044da"
}, ...
}]
但我只想显示(输出)到JSON
[{
"id": "572041b3288b560e5e00451c",
"name": "Test",
"date": "2016-04-27T05:25:00+1000",
"location": "Sydney, NSW"
}]
我该怎么做呢? JMSSerializerBundle在线没有太多文档。
编辑:我应该提到我正在查询的数据库集合与由FOSUserBundle管理的User集合有关系。我不确定这与我的问题有什么关系
答案 0 :(得分:1)
您应该查看捆绑包的文档,可能您会找到更多信息 http://jmsyst.com/bundles/JMSSerializerBundle
http://jmsyst.com/libs/serializer/master/usage
您似乎使用了序列化程序的错误功能。在您的情况下,您似乎需要从用户对象获取json,因此您需要使用
$serializer = SerializerBuilder::create()->build();
$result = $serializer->serialize($events, 'AppBundle\Document\Event', 'json');
serialize($object):string
:从对象中获取字符串
deserialize($string):object
:从对象的表示中获取对象(json,xml ...)。