2012-11-08 11 views
6

Próbuję serializować dokument MongoDB z osadzonymi dokumentami w Symfony 2.1. Używam pakietów JMSserializer i Mongodb-odm.Próbuję serializować osadzone dokumenty mongody za pomocą JMSSerizial Bundle

Mam następujące encje dokumentów.

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

i

// Tag 

namespace App\DocumentBundle\Document; 

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

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

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

typu obowiązujące ArrayCollection jest generowany dla atrybutu znacznika, ale wiązka JMSSerializer nie podoba. Jeśli zmienię tag na @MongoDB \ String i zregeneruję dokument Blog, , wówczas nastąpi serializacja, ale nie przy ustawieniu @MongoDB \ EmbedMany (targetDocument = "Tag").

Czy muszę podać niektóre z atrybutów JMSSerializer z adnotacjami, czy dokument osadzony ma być również serializowany?

+0

Kod wydaje się w porządku. Czy korzystasz z najnowszych wersji pakietów? Co rozumiesz przez to, że JMSSerializer go nie lubi? Co to jest komunikat o błędzie? – kratos

+1

dlaczego nie dodawać adnotacji '' $ tags'' do '' @MongoDB \ Collection'', jeśli przechowujesz tylko nazwy znaczników? skończysz z '' tags: ['tag1', 'tag2', 'tag3', 'etc'] '' –

+0

spróbuj określić typ 'ArrayCollection' z adnotacjami http://jmsyst.com/libs/ serializer/master/reference/adnotations # type –

Odpowiedz

0

Musisz skonfigurować oczekiwany typ dla JMSSerializer

Adnotacja:

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

yaml:

tags: 
    expose: true 
    type: ArrayCollection<App\DocumentBundle\Document\Tag> 
Powiązane problemy