繁体   English   中英

JMSSerializerBundle 和 Symfony 2 - 将 Doctrine/ODM 输出到 JSON 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM