2015-01-18 10 views
6

Meine configJMS Serializer ignoriert meine YML Entity Ausschlüsse

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

Meine YML Datei mit dem Namen Entity.Project.yml enthält

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

ich den Serializer wie so bin Laden innerhalb eines Controllers

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

Dies hat meine YML-Datei vollständig ignoriert und alle Felder aus dem Projekt verfügbar gemacht. Ich habe den Cache gelöscht.

Aber wenn ich diese verwenden, anstatt ohne den benutzerdefinierten Teilnehmer, dann sind die Ausschlüsse arbeiten

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

Auch das Hinzufügen explizit ein Verzeichnis nicht funktioniert entweder

$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(); 

Die docs sind nicht klar, wie diese Pfad sollte definiert sein. Die obige Methode führt zu keinem Fehler, zieht aber die YML-Dateien nicht an. Die folgenden Methodenfehler und sagt das Verzeichnis existiert nicht;

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

Wie kann ich den JMS-Serializer Blick auf meiner YML Datei machen, um die Felder auszuschließen und auch die Abonnenten nutzen?

Antwort

0

Das war hilfreich Using JMSSerialize to serialize Doctrine2 Entities that follow SimplifiedYamlDriver convention

Es scheint, dass die Dateinamen völlig anders sein muss, wenn Sie nicht über einen Namespace angeben. Ich habe nie daran gedacht, einen Namespace anzugeben, da dies in den Hauptdokumenten nicht erwähnt wird.

Wenn kein Namensraum ist dann die addMetaDir Nutzung ist in Ordnung, aber Sie müssen auch so aussehen, Dateinamen stellen Sie sicher,

Vendor.NameOfBundle.Entity.Project.yml 
1

Wie ich von documentation sehen müssen Sie die Einrichtung Ihres Yaml Dateien:

ist es notwendig, ein Metadaten-Verzeichnis zu konfigurieren, in denen diese Dateien gespeichert sind:

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

Für weitere Informationen lesen Sie Handbuch.

+0

Ich habe auch versucht, das, meine geänderte Frage sehen. Das Hinzufügen des Verzeichnisses hat keinerlei Auswirkungen. Selbst wenn es das richtige Ziel ist. Ich bin völlig verloren. –

+1

@JakeN hm .. wie ich sehe JMS Serializer Chaches Daten und lesen Sie es, haben Sie versucht, Testumgebung Cache zu löschen? 'php app/console cache: klar -e test' –

+0

ich habe angst so, viele viele viele Male :-( –

Verwandte Themen