我正在尝试检索所有记录并将它们显示在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 = $this->container->get('serializer');
$reports = $serializer->serialize($events, 'json');
return new Response($reports);
然而,要生成的JSON将与我的文档/实体不同,因此我希望/需要使用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集合有关系。我不确定这是否与我的问题有关,但是
您应该查看捆绑包的文档,可能会发现更多信息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…)的表示中获取对象。