php - getServiceLocator() outside Controller -


मेरे पास एक वर्ग है: ClassA () , मुझे डॉक्टर सेवा की आवश्यकता है $ this - & gt; getServiceLocator () - & gt; मिल ( 'सिद्धांत \ ORM \ EntityManager');

मैं इंटरफ़ेस ServiceManagerAwareInterface को लागू करने की कोशिश करता हूं, लेकिन फ़ंक्शन, getServiceLocator () और setServiceLocator (ServiceLocatorInterface $ serviceLocator) नहीं काम करते हैं।

क्या किसी ने ZF2 में नियंत्रक वर्ग के बाहर ServiceLocator का उपयोग किया है? यह संभव है?

  & lt;? Php नामस्थान डीबी सत्र / सेवा; Zend \ सत्र \ SaveHandler \ SaveHandlerInterface का उपयोग करें; Zend \ ServiceManager \ ServiceLocatorAwareInterface का उपयोग करें; Zend \ ServiceManager \ ServiceLocatorAwareTrait का उपयोग करें; / ** * सत्र डीडी का विवरण * * @ लेखक रॉब * / वर्ग सत्रडीबी लागू होता है SaveHandlerInterface, ServiceLocatorAwareInterface {ServiceLocatorAwareTrait; / ** * सत्र बचाने पथ * * @वार स्ट्रिंग * / संरक्षित $ सत्र सचेपाथ; / ** * सत्र नाम * * @वार स्ट्रिंग * / संरक्षित $ सत्रनाम; / ** * लाइफटाइम * @ वारे इंट * / संरक्षित $ जीवनकाल; / ** * कन्स्ट्रक्टर * * / सार्वजनिक फ़ंक्शन __construct () {} / ** * सत्र खोलें * * @ रुटर बूल * / सार्वजनिक फ़ंक्शन खोलें ($ सहेजे पाथ, $ नाम) {गूंज "खुले सत्र"; } / ** * सत्र बंद करें * * @ रुटर बूल * / सार्वजनिक फ़ंक्शन बंद करें () {गूंज "करीबी सत्र"; } / ** * सत्र पढ़ें * * @ परम अंत सत्र आईडी * @ सैटर्न की वापसी स्ट्रिंग स्ट्रिंग * / सार्वजनिक समारोह पढ़ा ($ आईडी) {गूंज "पढ़ा सत्र"; } / ** * सत्र लिखना * * @ परम अंत सत्र आईडी * सत्र के @ परम स्ट्रिंग डेटा * / सार्वजनिक फ़ंक्शन लिखना ($ आईडी, $ डेटा) {$ this-> getServiceLocator () - & gt; '); गूंज "लिखो"; } / ** * सत्र को नष्ट करना * * @ परम अंत सत्र आईडी * @ रुटर बूल * / सार्वजनिक समारोह नष्ट ($ आईडी) {गूंज "सत्र नष्ट"; } / ** * कचरा कलेक्टर * * @ परम इंट लाइफ टाइम (सेक।) * @ रिटन बूल * / पब्लिक फंक्शन जीसी (अधिकतम अधिकतम समय) {गूंज "जीसी सत्र"; }}  

सबसे आसान तरीका ServiceLocatorAwareTrait (ZF2 का हिस्सा) का उपयोग करना होगा। यदि आप इसका उपयोग करते हैं, तो यह सुनिश्चित कर लें कि आपका क्लास ServiceLocatorAwareInterface लागू करता है (आपको वास्तव में इसे लागू करना नहीं है क्योंकि यह विशेषता आपके लिए है, लेकिन आपको इसे अपने क्लास को लागू करने के लिए लागू करना है)।

> तो आप इस तरह से कुछ प्राप्त करें:

  उपयोग करें Zend \ ServiceManager \ ServiceLocatorAwareInterface; Zend \ ServiceManager \ ServiceLocatorAwareTrait का उपयोग करें; कक्षा ClassA लागू करने ServiceLocatorAwareInterface {ServiceLocatorAwareTrait; }  

फिर आप एक $ servicelocator उदाहरण की पकड़ पाने के लिए $ -> getServiceLocator () को कॉल कर सकते हैं।

हालांकि, अगर आपको सिखाना इकाई प्रबंधक की आवश्यकता है तो यह बेहतर है सेवासूत्रकर्ता को इंजेक्शन देने के बजाय इस एक निर्भरता को इंजेक्ट करने का अभ्यास करें।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -