2011-05-23 10 views
7

मैं सिग्फ़नी 2 ढांचे के लिए लिख रहे मैसेजिंग बंडल में युग्मन को कम करने के लिए एक उचित तरीका ढूंढ रहा हूं, ताकि मैं इसे आसानी से एप्लिकेशन के बीच उपयोग कर सकूं।इकाइयों में युग्मन कम करें

संदेश इकाई के प्रत्येक उदाहरण में प्रेषक और प्राप्तकर्ता होना चाहिए, instanceof Symfony\Component\Security\Core\User\UserInterface, जिसे मुझे गुणों के लिए सेटर्स में ठीक ठीक करने की आवश्यकता हो सकती है। हालांकि, ओआरएम संबंध स्थापित करने में, ऐसा लगता है कि मुझे विशेष रूप से एक लक्ष्य एंटीटी (Foo\BarBundle\Entity\User, उदाहरण के लिए) सेट करना है, जिसका अर्थ है कि विभिन्न अनुप्रयोगों में संदेश इकाई के सभी आगे उपयोगों को या तो कोड परिवर्तन की आवश्यकता होगी, या उन्हें इन्हें उपयोगकर्ता इकाई का उपयोग करके, जो मुझे मैसेजिंग बंडल के दायरे में होने की आवश्यकता नहीं है।

इस उदाहरण में युग्मन को कम करने के तरीके पर कोई सुझाव/सर्वोत्तम अभ्यास?

संपादित करें: मैं एक विस्तार के साथ एक वैश्विक पैरामीटर और @ORM\ManyToOne(targetEntity="%my.entity%") जैसे एनोटेशन में उपयोग करते हुए कि, कुछ कोशिश की, लेकिन ऐसा लगता है कि एनोटेशन पार्सर, पैरामीटर परिवर्तित नहीं करता है क्योंकि स्ट्रिंग एक शाब्दिक रूप में व्याख्या की गई थी, जो निश्चित रूप से असफल रहा।

उत्तर

4

जिस समाधान पर मैं अंततः बस गया था, वह डेटाबेस में संग्रहीत मैसेंजर इडेंटिटी बनाने के लिए था, जो ऑब्जेक्ट लेता है और इसके वर्ग का नाम और पहचानकर्ता स्टोर करता है। तब मैंने मैसेन्जरइंडेंटिटी में संग्रहीत इकाई के संदर्भ को लोड करने के लिए लाइफसाइक्लेंट का उपयोग किया, ताकि $messenger->getSender()->getUsername जैसे कुछ भी संभव हो।

तुम मेरे कार्यान्वयन on github देख सकते हैं (विशेष रूप से, entities और Doctrine event listener) ... आप भी doctrine2 usergroup here से चर्चा देख सकते हैं।

संपादित करें: आगे विचार के बाद, मैंने तय कर लिया है कि मैं कार्यान्वयन के बारे में मैं ऊपर बात पसंद नहीं आया (एक बात के लिए, मैं अनिवार्य रूप से कॉपी-पेस्ट किया गया था अन्य परियोजनाओं, जो बहुत ही अव्यवस्थित और उल्लंघन करते हुए महसूस किया में कोड डीआरवाई के), और इसलिए मैंने अपना कोड दोबारा दोहराया ताकि संदेश इकाई एक अमूर्त मैप किए गए सुपरक्लास है, जिसमें अमूर्त विधियों के साथ व्यापार तर्क की आवश्यकता होगी, प्रेषक और प्राप्तकर्ता का संदर्भ लें।

अब यह संदेश इकाई के अंतिम कार्यान्वयन के लिए अंत डेवलपर तक है, और बेस क्लास प्रेषक और प्राप्तकर्ता के लिए कार्यान्वयन को भी स्पर्श नहीं करता है, जिसने बंडल की निर्भरता को कम करने के अपने वांछित परिणाम को प्राप्त किया विशेष उपयोगकर्ता वर्ग।

1

आप सभी व्यावसायिक तर्कों के साथ एक मॉडल ऑब्जेक्ट बना सकते हैं और फिर एक इकाई बना सकते हैं जो मॉडल को बढ़ाता है लेकिन इसमें आपके इकाई प्रबंधक कोड और सिद्धांत एनोटेशन जोड़ता है। इस प्रकार FOSUserBundle काम करता है।