2011-05-31 7 views
6

मैं सोच रहा हूं कि निर्भरताओं की जांच करने का कोई उचित तरीका है या नहीं।निर्भरता Symfony2

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

कोई सुझाव?

उत्तर

3

आप मुख्य बंडल कक्षा पर class_exists का उपयोग कर सकते हैं कि प्रत्येक बंडल में होना चाहिए।

उदाहरण के लिए:

if (class_exists('Acme\CommentBundle\AcmeCommentBundle')) 
{ 
    // Bundle exists and is loaded by AppKernel... 
} 
+0

प्रिय @ मार्कमार्क, क्या आप वाकई सही परिणाम देंगे? कल्पना कीजिए: फाइल सिस्टम पर बंडल मौजूद है, लेकिन 'ऐप कर्नेल' में पंजीकृत नहीं था (जिसका अर्थ है न तो बंडल के मार्ग और न ही सेवाओं को लोड किया गया था)। क्या यह सच नहीं है कि 'class_exists (' कुछ \ नाम \ स्पेस \ क्लास ') बंडल के साथ पंजीकृत नहीं होने के बावजूद कक्षा को स्वत: लोड करने का प्रयास करेंगे? मुझे आश्चर्य है कि आप इसके बारे में क्या सोचते हैं? एचटीएच –

24

markymark के जवाब देने के लिए इसके अलावा, आप देख सकते हैं कि एक विशिष्ट सेवा (या किसी अन्य कंटेनर अवगत कोड) अपने नियंत्रक से मौजूद है निम्नलिखित स्निपेट के साथ:

if ($this->container->has('foo_service.alias')) 
{ 
    // service is loaded and usable 
} 

यदि आप किसी दिए गए सेवा के सटीक उपनामों के बारे में सुनिश्चित नहीं हैं, या केवल किक्स और गिगल्स के लिए, तो आप कंटेनर के साथ पंजीकृत सभी सेवाओं को देखने के लिए कंसोल कमांड php app/console container:debug चला सकते हैं।

+3

+1, आपका उत्तर स्पष्ट है और उपर्युक्त के रूप में मेरे लिए सही है। सेवाओं के लिए पूछना बेहतर है - न कि बंडलों के लिए। – Besnik

0

Kernel कक्षा में एक निश्चित वर्ग सक्रिय बंडल का हिस्सा है या कोई बंडल पंजीकृत है या नहीं, यह जांचने के लिए सहायक विधियों की एक सूची है।

public BundleInterface[] getBundles() 
    Gets the registered bundle instances. 

public bool isClassInActiveBundle(string $class) 
    Checks if a given class name belongs to an active bundle.