7

Symfony2.1内に埋め込まれたドキュメントでMongoDBドキュメントをシリアル化しようとしています。私はJMSserializerとMongodb-odmバンドルを使用しています。

次のDocumentsエンティティがあります。

// 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;
}

タグ属性に対してArrayCollectionタイプが生成されますが、JMSSerializerバンドルはそれを好みません。タグを@MongoDB\Stringに変更してブログドキュメントを再生成すると、シリアル化は発生しますが、@ MongoDB \ EmbedMany(targetDocument = "Tag")が設定されていません。

埋め込みドキュメントもシリアル化できるように、JMSSerializerの注釈付き属性の一部を指定する必要がありますか?

4

1 に答える 1

1

JMSSerializer の予想されるタイプを構成する必要があります

注釈 :

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

ヤムル:

tags:
    expose: true
    type: ArrayCollection<App\DocumentBundle\Document\Tag>
于 2014-01-07T11:34:44.723 に答える