2015-01-18 12 views
6

mio config èJMS Serializer ignorato le mie esclusioni YML entità

jms_serializer: 
    metadata: 
     auto_detection: true 
     directories: 
      NameOfBundle: 
       namespace_prefix: "" 
       path: "@VendorNameOfBundle/Resources/config/serializer" 

Il mio file YML chiamato Entity.Project.yml contiene

Vendor\NameOfBundle\Entity\Project: 
    exclusion_policy: ALL 
    properties: 
     id: 
      expose: true 

sto caricando il serializzatore in questo modo all'interno di un controller

$serializer = SerializerBuilder::create() 
    ->configureListeners(function(EventDispatcher $dispatcher) { 
     $dispatcher->addSubscriber(new ProjectSubscriber($this->container)); 
    }) 
    ->addDefaultListeners() 
    ->build(); 

Questo ha completamente ignorato il mio file YML e espone tutti i campi dal Progetto. Ho cancellato la cache.

Ma se io uso questo, invece, senza l'abbonato personalizzato, quindi le esclusioni lavorano

$serializer = $this->get("jms_serializer"); 

Anche esplicitamente l'aggiunta di una directory non funziona neanche

$serializer = SerializerBuilder::create() 
    ->configureListeners(function(EventDispatcher $dispatcher) { 
     $dispatcher->addSubscriber(new ProjectSubscriber($this->container)); 
    }) 
    ->addDefaultListeners() 
    ->addMetadataDir(realpath($this->get('kernel')->getRootDir()."/../") . '/src/Vendor/NameOfBundle/Resources/config/serializer')   
    ->build(); 

I documenti non sono chiare su come questo il percorso dovrebbe essere limitato. Il metodo sopra non ha errori, ma non inserisce i file YML. Gli errori del metodo sottostante e dice che la directory non esiste;

$serializer = SerializerBuilder::create() 
    ->configureListeners(function(EventDispatcher $dispatcher) { 
     $dispatcher->addSubscriber(new ProjectSubscriber($this->container)); 
    }) 
    ->addDefaultListeners() 
    ->addMetadataDir('@VendorNameOfBundle/Resources/config/serializer') 
    ->build(); 

Come faccio a rendere il look JMS Serializzatore al mio file YML al fine di escludere i campi e utilizzare anche il server di sottoscrizione?

risposta

0

questo è stato utile Using JMSSerialize to serialize Doctrine2 Entities that follow SimplifiedYamlDriver convention

Sembrerebbe che i nomi dei file deve essere completamente diverso se non si specifica uno spazio dei nomi. Non ho mai pensato di specificare uno spazio dei nomi in quanto questo non è menzionato nei documenti principali.

Se non c'è spazio dei nomi allora l'utilizzo addMetaDir va bene, ma è anche necessario assicurarsi che i nomi di file simile a questa

Vendor.NameOfBundle.Entity.Project.yml 
1

come la vedo da documentation è necessario configurare i file YAML:

è necessario configurare una directory di metadati in cui si trovano i file:

$serializer = 
    JMS\Serializer\SerializerBuilder::create() 
     ->addMetadataDir($someDir) 
     ->build(); 

Per ulteriori informazioni leggere il manuale.

+0

Ho anche provato, che, vedi la mia domanda modificata. L'aggiunta della dir non ha alcun effetto. Anche quando è la giusta dir. Sono completamente perso. –

+1

@JakeN hm .. come vedo serializzatore JMS memorizza i dati e li legge, hai provato a svuotare la cache dell'ambiente di test? 'app php/console cache: clear -e test' –

+0

Temo di sì, molte molte volte :-( –

Problemi correlati