序列化数据MongoDB JMSSerializer不支持资源

时间:2013-09-17 14:05:34

标签: mongodb doctrine-orm symfony-2.3 fosrestbundle jmsserializerbundle

我正在尝试开发一个API(基于DoctrineMongoDBBundle和FOSRestBundle),它存储MongoDB中的所有空洞数据,恢复它,并使用FOSRest显示它。

当我尝试显示存储在数据库中的对象列表时,这就是我得到的:

  

“message”:“序列化数据不支持资源。路径:   Monolog \ Handler \ StreamHandler - > Symfony \ Bridge \ Monolog \ Logger - >   Doctrine \ Bundle \ MongoDBBundle \ Logger \ Logger - >   Doctrine \ Bundle \ MongoDBBundle \ Logger \ AggregateLogger - >   Doctrine \ ODM \ MongoDB \ Configuration - >学说\ MongoDB的\连接    - > Doctrine \ ODM \ MongoDB \ LoggableCursor“,”class“:”JMS \ Serializer \ Exception \ RuntimeException“,

我对FOS的config.yml是这样的:

fos_rest:
    param_fetcher_listener: true
    body_listener: true
    format_listener: true
    view:
        view_response_listener: force

这是我的控制者:

/**
 * @Route("/services.{_format}", defaults={"_format" = "json"})
 * @REST\View()
 */
public function getServicesAction($_format){
    $services = $this->get('doctrine_mongodb')->getManager()
        ->getRepository('RadmasOpen010Bundle:Service')
        ->findAll();

    return $services;
}

我尝试返回格式良好的数组,并且没有显示错误,以及是否将所有服务对象加入数组。

我试图解决它用PECL安装Mongo PHP扩展,改变一些配置,但没有任何改变。

任何人都知道会发生什么事?

1 个答案:

答案 0 :(得分:2)

如果你想获得RadmasOpen010Bundle:服务文档的集合,你必须在从存储库调用find方法或从查询构建器调用getQuery方法之后调用方法“toArray”

/**
 * @Route("/services.{_format}", defaults={"_format" = "json"})
 * @REST\View()
 */
public function getServicesAction($_format){
    $services = $this->get('doctrine_mongodb')->getManager()
        ->getRepository('RadmasOpen010Bundle:Service')
        ->findAll()->toArray();

    return $services;
}

您也可以调用array_values($ services)来正确序列化排除策略