भंडार में एक सेवा इंजेक्शन अनुशंसित नहीं है, क्योंकि यह चिंताएं का पृथक्करण टूट जाता है। इसके बजाय, आपको एक सेवा वर्ग का उपयोग करना चाहिए जो भंडार को कॉल करता है। आपकी टिप्पणी के आधार पर, एक साधारण काम प्रवाह इस तरह दिखेगा:
UserService
कक्षा को परिभाषित करें, और इसे एक सेवा के रूप में पंजीकृत करें।
- इंजेक्षन
security.context
UserService
- में परिभाषित
UserService::getUsers()
(या जो भी आप विधि होना चाहते हैं)। यह विधि में है कि आप क्वेरी के मानदंड निर्धारित करने के लिए security.context
का उपयोग करेंगे। आप या तो सीधे UserRepository::getUsers()
विधि पर मानदंड पास कर सकते हैं, या UserService
ऑब्जेक्ट में DQL बना सकते हैं और इसे UserRepository
पर पास कर सकते हैं।
UserService::getUsers()
जो भी UserRepository::getUsers()
रिटर्न देता है।
इस तरह की स्थितियों को मैं संभालना पसंद करता हूं, लेकिन पूर्णता के लिए, आप अपने भंडार पर सरल सेटर इंजेक्शन का भी उपयोग कर सकते हैं। आप इकाई प्रबंधक के माध्यम से भंडार प्राप्त करेंगे (और सेवा कंटेनर से आपके प्रश्न में नहीं), और बस $userRepository->setSecurityContext($this->get('security.context'))
पर कॉल करें।
स्रोत
2012-02-03 15:55:54
मुझे नहीं पता कि मैं क्या करना चाहता हूं यह अच्छी बात है या नहीं। मैं सुरक्षा संदर्भ में भंडार में प्रवेश करना चाहता हूं यह जांचने के लिए कि वर्तमान उपयोगकर्ता में role_user है या सभी dql अनुरोध में कुछ फ़िल्टर नहीं जोड़ना है। DI i चीज़ के साथ यह संभव नहीं है क्योंकि इकाई प्रबंधक getRepository फ़ंक्शन को कॉल करता है और अनुरोधित भंडार को तुरंत चालू करता है, इसे कंटेनर से नहीं मिलता है, किसी को इस समस्या का कोई विचार है? thx बहुत – EAdel