2012-08-31 18 views
6

मैं जानना चाहता हूं कि कमांड में टैग की गई सेवाओं को खोजने का कोई तरीका है या नहीं।Symfony2 - कमांड में टैग की गई सेवाएं खोजें

मेरे पास एक कमांड है जो ContainerAwareCommand बढ़ाता है, मैं कंटेनर प्राप्त करने में सक्षम हूं लेकिन मैं एक विशिष्ट टैग द्वारा टैग की जाने वाली सभी सेवाएं प्राप्त करना चाहता हूं। उदाहरण के लिए, मैं ऐसा ही कुछ करना चाहते हैं:

$this->getContainer()->findTaggedServiceIds('smtp.transport') 

उत्तर

10

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

http://symfony.com/doc/current/components/dependency_injection/tags.html

+0

हाँ, मैं पहले से ही एक संकलक पास है कि मैं अपने बंडल में $ container-> addCompilerPass() के माध्यम से जोड़ा है। समस्या यह है कि मुझे कमान में कंटेनरबिल्डर प्राप्त करने का कोई तरीका नहीं मिला, ताकि मैं addCompilerPass() को कॉल कर सकूं। क्या तुम्हारे पास कोई विचार है? – passkey1510

+0

आह ठीक है, मुझे मिल गया है। मेरे पास एकाधिक ऐप हैं जिनमें एकाधिक ऐप कर्नेल हैं, बस बंडल लोड करने वाले सही ऐप को कॉल करना होगा। आपका बहुत बहुत धन्यवाद। – passkey1510

+0

@ passkey1510 आप तब इस जवाब को स्वीकार कर सकते हैं? :-) –