2012-11-08 10 views
6

Sto provando a serializzare un documento MongoDB con documenti incorporati all'interno di Symfony 2.1. Sto usando i pacchetti JMSserializer e Mongodb-odm.Sto provando a serializzare documenti mongodb incorporati con JMSSerizial Bundle

Ho le seguenti entità Documenti.

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

e

// Tag 

namespace App\DocumentBundle\Document; 

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

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

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

tipo Un ArrayCollection viene generato per l'attributo tag, ma il fascio JMSSerializer non piace. Se cambio il tag in @MongoDB \ String e rigenera il documento Blog, , si verifica la serializzazione, ma non con @MongoDB \ EmbedMany (targetDocument = "Tag") impostato.

Devo specificare alcuni degli attributi annotati di JMSSerializer per consentire la serializzazione anche del documento incorporato?

+0

Il codice sembra che vada bene. Stai usando le ultime versioni dei pacchetti? Inoltre cosa vuoi dire con il fatto che a JMSSerializer non piaccia? Qual è il messaggio di errore generato? – kratos

+1

perché non annotare '' $ tag'' con '' @MongoDB \ Collection'' se non stai memorizzando nient'altro che i nomi dei tag? finirai con tag '': ['tag1', 'tag2', 'tag3', 'etc'] '' –

+0

prova a specificare il tipo di 'ArrayCollection' con le annotazioni http://jmsyst.com/libs/ serializzatore/master/riferimento/annotazioni # tipo –

risposta

0

è necessario configurare il tipo di attesa per JMSSerializer

della nota:

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

Yaml:

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