2012-03-18 17 views
22

मैं एक सिम्फनी 2 प्रोजेक्ट से शुरू कर रहा हूं। मैं ढांचे की मूल बातें जानता हूं लेकिन मेरे पास एक प्रश्न है: सहायता के लिए या व्यावसायिक तर्क के लिए बनाए गए उन सहायक वर्गों को पॉट करने का सही स्थान कहां है?सिम्फनी 2 कस्टम हेल्पर कक्षाएं कहां रखें

+2

आप पूरा होने के लिए जानते हैं .. यदि आप वास्तव में नीचे दिए गए उत्तरों में से एक को सही उत्तर देते हैं, तो फिर यह समुदाय के लिए अच्छा होगा, और फिर बताएं कि आपने समाधान कैसे कार्यान्वित किया है और यदि यह काम करता है अंत में आप के लिए अच्छी तरह से बाहर। तो सब कुछ देने और लेने के बारे में है, न केवल – abbood

उत्तर

13

अधिकतम का जवाब सही है। हालांकि मैं आपके कोड के लिए जिस मार्ग की सिफारिश करता हूं उससे सवाल करता हूं।

सेवा कंटेनर एक्सटेंशन DependencyInjection (संबंधित)/

से http://symfony.com/doc/current/cookbook/bundles/best_practices.html

का कहना है कि अपने सेवा एक फ़ोल्डर में रखा जाना चाहिए:

निम्नलिखित वर्गों और फ़ाइलों को विशिष्ट स्थापन है 'निर्भरता इंजेक्शन' कहा जाता है, न कि 'सेवाएं'। पूर्ण रूप से, यह होना चाहिए src/फू/BarBundle/DependencyInjection

मैं इस मान लीजिए कि कोई है कि पूर्व की थी और सिर्फ उन सब को बाद में जाने के रूप में समाप्त हो गया है (!)

+8

लेना आप गलत हैं, आपको निर्भरता में DI एक्सटेंशन को स्टोर करना होगा, न कि सेवाएं स्वयं। http://symfony.com/doc/current/best_practices/business-logic.html – PachinSV

+0

मैं @PachinSV से सहमत हूं। यह पृष्ठ स्पष्ट रूप से इसका उल्लेख करता है: http://symfony.com/doc/current/cookbook/bundles/extension.html –

2

आप अपने बंडल के तहत कस्टम क्लास बना सकते हैं, जैसे फ़ोल्डर हेल्पर/.. हालांकि, अपने कोड में उन सहायक का उपयोग करने के लिए, आपको अपनी सेवा विवरण फ़ाइल में उन हेल्पर को परिभाषित करने की आवश्यकता होगी (जैसे services.xml) ... फिर आप $ कंटेनर-> प्राप्त करें ('your_helper') ->

5

व्यवसाय तर्क रखने का सबसे अच्छा तरीका सभी तर्कों को संभालने के लिए सेवा बना रहा है। तो यह में होगा:

src/Foo/BarBundle/Service 

और आप services.yml में सेवा को कॉल करने की जरूरत है।

3

मैं हाल ही में कुछ छोटे काम किया है एक मौजूदा सिम्फनी 2 परियोजना।

src/MyBundle/Helper/MyUtilHelper.php 

बुला बिना मैं अपने बंडल में MyUtilHelper वर्ग का उपयोग कर सकते हैं: Tuong Le से जवाब ने वर्णन किया है, मैं अपने सहायक वर्गों हेल्पर प्रत्यय के साथ बंडल और वर्ग के नाम की Helper निर्देशिका के अंतर्गत यानी सहायक वर्ग में स्थित है बनाया सेवा कंटेनर यानी मुझे कॉल करने की आवश्यकता नहीं थी।

$container->get('my_util'); 

मुझे वास्तव में पता नहीं है कि कुछ विशेष कॉन्फ़िगरेशन है या नहीं। मेरे सेटअप में; किसी को पहले ही इसे सेटअप मिला है और मैं बस नई कार्यक्षमता जोड़ रहा था।

6

क्या @Adam कहते हैं गलत है, तो आप अपने निर्भरता इंजेक्शन DependecyInjection निर्देशिका में एक्सटेंशन, नहीं सेवाओं ही स्टोर करने के लिए किया है। दस्तावेज़ीकरण में कहा गया है कि आप अपनी पसंद के किसी भी स्थान पर अपने (कस्टम) व्यवसाय तर्क वर्गों को स्टोर कर सकते हैं।

http://symfony.com/doc/current/best_practices/business-logic.html

0

आधिकारिक दस्तावेज के अनुसार - विशेष रूप से - Symfony उत्तम आचरण - आप src तहत फ़ोल्डर Utils में अपनी सेवाओं को संग्रहीत करना चाहिए। मैं विश्वास करता हूं कि सेवा कंटेनर के माध्यम से आवेदन के अन्य हिस्सों में उपलब्ध आपके बंडल की सेवाओं द्वारा प्रदान की गई कार्यक्षमता को पूरा करने के लिए आप चाहे या नहीं चाहते हैं, यह सही तरीका है।इसके अलावा, आप किसी भी स्थान पर सहायक वर्गों को स्टोर कर सकते हैं जिन्हें आप उपयुक्त मानते हैं। @Adam Knowles और @PachinSV उत्तरों के बारे में - वे बिल्कुल सही नहीं हैं क्योंकि वे आपके प्रश्न का उत्तर नहीं देते हैं - "उन सहायक वर्गों को पॉट करने के लिए सही जगह कहां है जो मैं मदद के लिए या व्यापार तर्क के लिए बनाती हूं?" या "कक्षाओं को स्टोर करने के लिए जहां मैं पंजीकरण करना चाहता हूं और सेवा कंटेनर के माध्यम से उपयोग करना चाहता हूं" - लेकिन बंडल एक्सटेंशन श्रेणी कहां रखना है - जिसका मुख्य उद्देश्य कॉन्फ़िगरेशन के बारे में जानकारी प्रदान करना है जो स्वचालित रूप से को आपके बंडल से ऐप्स पर लोड किया गया है सेवा कंटेनरकी प्रक्रिया के दौरान कर्नेल बूटिंग।