2014-04-30 6 views
5

क्या मैं टैग ऑब्जेक्ट को क्रमबद्ध करने के तरीके को ओवरराइट कर सकता हूं? वर्तमान में सबकुछ वापस आ गया है, मैं आईडी, create_at, update_at और टैगिंग को बाहर करना चाहता हूं। मैं जेएमएस सीरिएलाइज़र बंडल का उपयोग कर रहा हूं, एफपीएन टैग बंडल के साथ टैग एक्सटेंशन।DoctrineExtensions के लिए serializer मेटाडेटा ओवरराइट करें टैग करने योग्य

यह मेरा सेटअप है, मैं टैग बंडल के माता-पिता को एफपीएन में सेट करने के बारे में सोच रहा हूं, जब इकाई का नामस्थान वास्तव में सिद्धांत है। एक्सटेंशन समस्या हो सकती है।

अधिकांश इकाई पैरामीटर DoctrineExtensions \ Taggable \ Entity \ Tag (id, name, created_at आदि) में हैं। मैं एफपीएन बंडल को ओवरराइट कर रहा हूं जो डॉक्टरेट एक्सटेंशन का विस्तार करता है। DoctrineExtensions एक पुस्तकालय एक बंडल नहीं है।

मैं यह कैसे कर सकता हूं?

# app/config/config.yml 
# ... 
jms_serializer: 
    metadata: 
     auto_detection: true 
     directories: 
      TagBundle: 
       namespace_prefix: "FPN\\TagBundle" 
       path: "@MYTagBundle/Resources/config/serializer/fpn" 


# MY\TagBundle\Resources\config\serializer\fpn\Entity.Tag.yml 
FPN\TagBundle\Entity\Tag: 
    exclusion_policy: ALL 
    properties: 
     id: 
      expose: false 
     name: 
      expose: true 
     created_at: 
      expose: false 
     updated_at: 
      expose: false 
     tagging: 
      expose: false 


# src/MY/TagBundle/Entity/Tag.php 
<?php 
namespace MY\TagBundle\Entity; 

use FPN\TagBundle\Entity\Tag as BaseTag; 

class Tag extends BaseTag 
{ 
} 


# vendor/fpn/tag-bundle/FPN/TagBundle/Entity/Tag.php 
<?php 

namespace FPN\TagBundle\Entity; 

use DoctrineExtensions\Taggable\Entity\Tag as BaseTag; 

class Tag extends BaseTag 
{ 
    .... 
} 



# src/MY/TagBundle/MYTagBundle.php 
<?php 

namespace MY\TagBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class MYTagBundle extends Bundle 
{ 
    // Is this unnecessary due to config.yml? 
    public function getParent() 
    { 
     return 'FPNTagBundle'; 
    } 
} 
+0

'बेनकाब:

आपका config तो कुछ इस तरह होना चाहिए। क्या यह आपके प्रश्न में एक टाइपो है, या आपकी वास्तविक yaml फ़ाइल में? –

+0

इसके अलावा, क्या आप कॉन्फ़िगरेशन वास्तव में उपयोग किए जा रहे हैं या नहीं, यह देखने के लिए, आप गुणों में से किसी एक को निम्नलिखित जोड़ सकते हैं? 'serialized_name: 'fooBar'' –

+0

हाँ, जो एक टाइपो था, मैंने इसे ठीक कर दिया है। सिम्फनी को यमल पार्स त्रुटि को फेंकना चाहिए था अगर यह गलत तरीके से इंडेंट किया गया था। मैं जल्द ही serialized_name बदल दूंगा। – shapeshifter

उत्तर

1

जेएमएसएसरियलाइज़र के लिए आपको उसी नामस्थान पर अपनी क्रमबद्धता कॉन्फ़िगरेशन को परिभाषित करने की आवश्यकता होती है, जहां गुण घोषित किए जाते हैं।

उदाहरण के लिए, मान लीजिए कि आप के साथ $createdAt और $updatedAt गुण एक Application\Bundle\AcmeBundle\Entity\BaseModel वर्ग, और एक Application\Bundle\AcmeBundle\Entity\Model वर्ग एक $name संपत्ति के साथ BaseModel वर्ग इनहेरिट डालते हैं। उस स्थिति में, आपको 2 सीरियलाइजेशन फाइलों की आवश्यकता होगी: नामित $createdAt और $updatedAt गुणों के लिए क्रमबद्धता कॉन्फ़िगरेशन के साथ; और संपत्ति के लिए कॉन्फ़िगर के साथ Entity.Model.xml नाम दिया गया।

आप अच्छी तरह से FPNTagBundle के लिए विन्यास overrode, हालांकि केवल क्षेत्र आप अपने वर्तमान विन्यास के साथ क्रमबद्धता के लिए कॉन्फ़िगर कर सकते हैं $slug क्षेत्र (जो FPN\TagBundle\Entity\Tag कक्षा में परिभाषित किया गया है) है। अन्य क्षेत्रों के लिए, आपको DoctrineExtensions\Taggable\Entity\Tag की कॉन्फ़िगरेशन निर्देशिकाओं को ओवरराइड करना होगा। (नाम संपत्ति के लिए) TRUE` ठीक से इंडेंट किया प्रतीत नहीं होता:

# app/config/config.yml 
# ... 
jms_serializer: 
    metadata: 
     auto_detection: true 
     directories: 
      TagBundle: 
       namespace_prefix: "FPN\\TagBundle" 
       path: "@MYTagBundle/Resources/config/serializer/fpn" 
      DoctrineTaggable: 
       namespace_prefix: "DoctrineExtensions\\Taggable" 
       path: "@MYTagBundle/Resources/config/serializer/doctrine" 


# MY\TagBundle\Resources\config\serializer\fpn\Entity.Tag.yml 
FPN\TagBundle\Entity\Tag: 
    exclusion_policy: ALL 
    properties: 
     id: 
      expose: false 
     name: 
      expose: true 
     created_at: 
      expose: false 
     updated_at: 
      expose: false 
     tagging: 
      expose: false 
# MY\TagBundle\Resources\config\serializer\fpn\Entity.Tag.yml 
FPN\TagBundle\Entity\Tag: 
    exclusion_policy: ALL 
    properties: 
     slug: 
      expose: false # or true, as you wish :) 
संबंधित मुद्दे