2015-01-18 10 views
6

मेरे configJMS Serializer मेरी YML इकाई बहिष्करण को नजरअंदाज कर दिया

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

मेरे YML Entity.Project.yml नामक फ़ाइल

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

मैं एक नियंत्रक

$serializer = SerializerBuilder::create() 
    ->configureListeners(function(EventDispatcher $dispatcher) { 
     $dispatcher->addSubscriber(new ProjectSubscriber($this->container)); 
    }) 
    ->addDefaultListeners() 
    ->build(); 
के भीतर से तो जैसे serializer लोड हो रहा हूँ होता है

यह मेरी वाईएमएल फ़ाइल को पूरी तरह से अनदेखा करता है और परियोजना से सभी क्षेत्रों को उजागर करता है। मैंने कैश साफ़ कर दिया है।

लेकिन अगर मैं बजाय कस्टम ग्राहक के बिना इस का उपयोग करें, तो बहिष्करण काम

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

स्पष्ट रूप से भी जोड़ने एक निर्देशिका या तो काम नहीं करता है

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

डॉक्स कैसे इस पर स्पष्ट नहीं हैं पथ को परिभाषित किया जाना चाहिए। उपर्युक्त विधि त्रुटि नहीं करती है, लेकिन वाईएमएल फ़ाइलों में नहीं खींचती है। नीचे विधि त्रुटियों और कहता है कि निर्देशिका मौजूद नहीं है;

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

मैं कैसे आदेश फील्ड छोड़ और यह भी उपयोग करने के लिए सब्सक्राइबर में मेरी YML फ़ाइल पर JMS Serializer देखो कैसे करूं?

उत्तर

0

तो यह उपयोगी Using JMSSerialize to serialize Doctrine2 Entities that follow SimplifiedYamlDriver convention

ऐसा लगता है कि फ़ाइल नाम यदि आप एक नाम स्थान निर्दिष्ट नहीं करते हैं पूरी तरह से अलग होने की जरूरत है था। मैंने कभी भी नामस्थान निर्दिष्ट नहीं किया क्योंकि यह मुख्य दस्तावेज़ों में उल्लिखित नहीं है।

अगर कोई नाम स्थान है तो addMetaDir उपयोग ठीक है लेकिन आप यह भी सुनिश्चित करें कि आपके फ़ाइल के नाम इस

Vendor.NameOfBundle.Entity.Project.yml 
1

के रूप में मैं documentation से देख आप अपने YAML फ़ाइलें सेटअप की जरूरत है:

यह एक मेटाडाटा निर्देशिका जहां उन फ़ाइलों स्थित हैं कॉन्फ़िगर करने के लिए आवश्यक है:

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

में अधिक जानकारी पढ़ने के मैनुअल के लिए।

+0

मैं भी कोशिश की है की तरह लग रहे बनाने के लिए, कि, मेरे संशोधन प्रश्न देखें जरूरत है। डीआईआर को जोड़ने से कोई प्रभाव नहीं पड़ता है। यहां तक ​​कि जब यह सही है। मैं पूरी तरह से खो गया हूँ। –

+1

@ जेकएन एचएम .. जैसा कि मैंने जेएमएस सीरियलाइज़र डेटा को देखा और इसे पढ़ा, क्या आपने टेस्ट पर्यावरण कैश को साफ़ करने का प्रयास किया है? 'php app/console cache: clear -e test' –

+0

मुझे डर है, कई बार कई बार :-( –

संबंधित मुद्दे