FOSRestBundle&推进和JMSserializerBundle Symfony2

时间:2013-12-01 13:53:53

标签: php symfony fosrestbundle jmsserializerbundle

我正在尝试按照William Durand的教程here创建一个使用fosrest bundle并推进的rest api。我已经连续2天对抗序列化了。我发现一些用户遇到了类似的问题,但没有找到解决方案。

这是我的控制器:

/**
 * @Rest\View
 */
public function allAction(){
    $messages = MessageQuery::create()->find();
    return array('messages' => $messages);
}

我期待输出消息和id,但是我得到一个包含我的模型信息的输出:

{ "messages" : { "formatter" : { "as_columns" : [  ],
      "class" : "My\\FooBundle\\Model\\Message",
      "collection_name" : "PropelObjectCollection",
      "current_objects" : [  ],
      "db_name" : "fooDB",
      "has_limit" : false,
      "peer" : "My\\FooBundle\\Model\\MessagePeer",
      "with" : [  ]
    },
  "model" : "My\\FooBundle\\Model\\Message"
} }

我确保我的jmsserializer包有propelcollectionhandler.php补丁。

我在app/config/config.yml

中有这个
jms_serializer:
    metadata:
        auto_detection: true
        directories:
            Propel:
                namespace_prefix: "My\\FooBundle\\Model\\om"
                path: "@MyFooBundle/Resources/config/serializer"

我已经看到namespace_prefix在Github上的一些示例中是空白的,因为他们声称推进中的BaseModel没有命名空间,但是我的自生推进基础模型有一个名称空间,是1.7这个新东西?我在使用和不使用namespace_prefix的情况下尝试了它,并且在指定的目录中有一个Model.om.BaseTableMessage.yml文件。

有人遇到过这个问题吗?你是怎么解决的?谢谢!

1 个答案:

答案 0 :(得分:4)

来自https://groups.google.com/d/msg/symfony2/FqiqJ2dqAM8/8b-9xucG7k4J的Quentin Favrie的解决方案为我工作。

将此代码添加到My/FooBundle/Resources/config/services.yml

parameters:
    jms_serializer.propel_collection_handler.class: JMS\Serializer\Handler\PropelCollectionHandler

services:
    jms_serializer.propel_collection_handler:
        class: %jms_serializer.propel_collection_handler.class%
        tags:
            - { name: jms_serializer.subscribing_handler }