[英]JMSSerializerBundle and Symfony 2 - Output Doctrine/ODM to JSON file
我正在尝试检索所有记录并将它们显示在 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 将与我的文档/实体不同,因此我想要/需要使用 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 管理的用户集合有关系。 我不确定这是否与我的问题有任何关系
您应该查看捆绑包的文档,可能会找到更多信息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...)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.