2012-08-08 5 views
5

हम नियंत्रक के भीतर इकाई प्रबंधक का उपयोग कर सकते के बाहर से इकाई प्रबंधक पाने के लिए, लेकिन हम कैसे Zendframework 2.

+0

बस एक सवाल है, क्योंकि आप सिद्धांत ओआरएम के बारे में बात कर रहे हैं, क्या आपको इकाई को अपने फ़ील्ड स्तर पर डाउन करने में परेशानी हो रही है? :) – Sam

उत्तर

12

में परियोजना के बाकी हिस्सों में इकाई प्रबंधक सिंगलटन उदाहरण उपयोग कर सकते हैं ' सही करने का तरीका यह है कि किसी भी वर्ग में इकाई प्रबंधक को इंजेक्ट करने के लिए कारखाने का उपयोग करें। कारखानों के अलावा, कक्षाओं को वास्तव में सेवा लोकेटर से अवगत नहीं होना चाहिए। तो, अपने मॉड्यूल config इस प्रकार दिखाई देगा:

'controllers' => array(
    'factories' => array(
      'mycontroller' => 'My\Namespace\MyControllerFactory' 
    ) 
) 

फिर अपने कारखाने वर्ग कुछ इस तरह दिखेगा:

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

class MyControllerFactory implements FactoryInterface 
{ 

    public function createService(ServiceLocatorInterface $serviceLocator) 
    { 
     $serviceLocator = $serviceLocator->getServiceLocator(); 

     $myController = new MyController; 
     $myController->setEntityManager(
      $serviceLocator->get('doctrine.entitymanager.orm_default') 
     ); 

     return $myController; 
    } 
} 

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

यदि आपके पास बहुत सारे और बहुत से वर्ग हैं जो इकाई प्रबंधक का उपभोग करते हैं, तो आप SerivceManager को अपना खुद का इंटाइलाइज़र जोड़ने पर विचार करना चाहेंगे जो किसी कारखाने की आवश्यकता के बिना इकाई प्रबंधक को इंजेक्ट करेगा।

+0

मुझे आपका अंतिम सुझाव पसंद है। वह 'EntityManagerAwareInterface' बना सकता है और ServiceLocator स्वचालित रूप से इसे लागू करने वाले किसी भी वर्ग में इंजेक्ट कर सकता है। मुझे लगता है कि वे इस सिद्धांत का उल्लेख नीचे-नीचे सिद्धांत-ओआरएम-मॉड्यूल पेज के रीडमे पर करते हैं। जल्दी आ रहा है। –

+0

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

+0

अच्छा बिंदु। मुझे यह देखने में मदद करने के लिए धन्यवाद। –

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