我尝试在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注释属性允许嵌入文档也被序列化?
答案 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>