我正在尝试使用JMSSerizial Bundle序列化嵌入式mongodb文档

时间:2012-11-08 07:05:29

标签: mongodb symfony jmsserializerbundle

我尝试在Symfony 2.1中使用嵌入式文档序列化MongoDB文档。我正在使用JMSserializer和Mongodb-odm包。

我有以下文件实体。

// Blog

namespace App\DocumentBundle\Document;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use JMS\SerializerBundle\Annotation\Type;

/**
 * @MongoDB\Document(repositoryClass="App\DocumentBundle\Repository\BlogRepository")
 */
class Blog {

    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\String
     * @Assert\NotBlank()
     */
    protected $title;

    /**
     * @MongoDB\string
     * @Assert\NotBlank()
     */
    protected $blog;

    /**
     * @MongoDB\EmbedMany(targetDocument="Tag")
     */
    private $tags;

    /**
     * @MongoDB\Timestamp
     */
    protected $created;

    /**
     * @MongoDB\Timestamp
     */
    protected $updated;
}

// Tag

namespace App\DocumentBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\EmbeddedDocument
 */
class Tag {

    /**
     * @MongoDB\String
     */
    protected $name;
}

为tag属性生成ArrayCollection类型,但JMSSerializer包不喜欢它。如果我将标记更改为@MongoDB \ String并重新生成Blog文档, 然后进行序列化,但没有设置@MongoDB \ EmbedMany(targetDocument =“Tag”)。

我是否需要指定一些JMSSerializer注释属性允许嵌入文档也被序列化?

1 个答案:

答案 0 :(得分:0)

您必须配置JMSSerializer的预期类型

注释:

/**
 * @MongoDB\EmbedMany(targetDocument="Tag")
 * @Type(ArrayCollection<App\DocumentBundle\Document\Tag>)
 */
private $tags;

Yaml:

tags:
    expose: true
    type: ArrayCollection<App\DocumentBundle\Document\Tag>