2011-11-04 7 views
6

अब मैं सेवाओं को टैग कर सकता हूं उदाहरण: form.type चुड़ैल इस सेवा का उपयोग फॉर्म प्रकार के रूप में करने के लिए फॉर्म घटक को सूचित करता है।अपने कस्टम सेवा कंटेनर टैग कैसे जोड़ें, और symfony2 में टैग की गई सेवाओं को कैसे प्राप्त करें?

मुझे इस पर कोई दस्तावेज नहीं मिल रहा है, मैं अपना टैग कैसे परिभाषित कर सकता हूं? और उन सभी सेवाओं को प्राप्त करें जिन्हें इसके साथ टैग किया गया है? या यहां तक ​​कि मेरी टैग सेवाओं के साथ टैग की गई सभी को किसी अन्य सेवा के तर्क के रूप में भी पास कर दें?

उत्तर

10

ठीक मैं इस सवाल का जवाब मिल गया है, मूल रूप से टैग कक्षाएं कि CompilerPassInterface संकलक पास वस्तुओं bunlde फ़ाइल में जोड़ा जा सकता है लागू करता है के द्वारा कार्रवाई की जाती है (जैसे: Symfony\Bundle\FrameworkBundle\FrameworkBundlebuild विधि देखें)

CompilerPass विधि process डायन प्राप्त करता ContainerBuilder तर्क के रूप में की है।
कंटेनरबिल्डर के पास विधि है: findTaggedServiceIds, टैग की गई सेवाएं आईडी प्राप्त करने के लिए चुड़ैल का उपयोग किया जा सकता है, और जो कुछ भी आप चाहते हैं उसे करें।

किसी अन्य सेवा के परिणाम पास करने के लिए आपको इसके लिए खाली संग्रह तर्क परिभाषित करना होगा, और कंटेनरबिल्डर का उपयोग करके इस तर्क को मिली सेवा आईडी के साथ प्रतिस्थापित करें।

जैसे: Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass

+0

जवाब साझा करने के लिए धन्यवाद। लेकिन इसके लिए आपको क्या चाहिए? मैंने कभी भी इस – HappyDeveloper

+0

का उपयोग नहीं किया बस सरल उत्सुक :) – canni

संबंधित मुद्दे