2012-11-11 16 views
9

मैं ज़ेंड फ्रेमवर्क 2 एप्लिकेशन में सिद्धांत 2 का उपयोग कर रहा हूं। क्या डॉक्टर द्वारा लौटाई गई संस्थाओं में निर्भरताओं को इंजेक्ट करने के लिए ZF2 का उपयोग करने का कोई तरीका है? डेटाबेस से पुनर्प्राप्त होने पर संस्थाओं द्वारा सिद्धांतों का निर्माण किया जाता है। जहां तक ​​मैं ZF2 में निर्भरताओं को इंजेक्ट करना जानता हूं, मुझे सेवा लोकेटर का उपयोग करके इकाइयों को तुरंत चालू करने की आवश्यकता है। मैं नहीं देख सकता कि मैं डॉक्टरेट कोड कोड को संशोधित किए बिना सिद्धांत के साथ कैसे एकीकृत कर सकता हूं। एकमात्र व्यवहार्य समाधान जो मैं अभी देख सकता हूं वह एक छोटी सी सेवा लिखना है जो परिणाम को सिद्धांत से वापस लेता है और आवश्यक निर्भरताओं को इंजेक्ट करता है। क्या कोई और सुरुचिपूर्ण समाधान है?डॉक्टर 2 के साथ जेडएफ 2 - इकाइयों में निर्भरता इंजेक्शन

बेस्ट सादर ईसाई

+0

क्या क्या आप इंजेक्ट करना चाहते हैं? मैं ऐसे मामले के बारे में नहीं सोच सकता जहां यह किसी इकाई में कुछ इंजेक्ट करने के लिए समझ में आता है। मुझे यकीन है कि आप जो चाहते हैं उसे करने का एक तरीका अवधारणा में फिट बैठता है। –

+0

इस दौरान मैंने एक और दिशा ली। जिन चीजों को मैं संस्थाओं को सौंपना चाहता था, वे अब एक सेवा में नियुक्त किए जाते हैं, जो संस्थाओं का प्रबंधन करता है। इसलिए – griesi

उत्तर

16

सिद्धांत EventManager में देखो, विशेष रूप से, postLoad जीवन चक्र घटना है, जो EventManager द्वारा हर बार एक इकाई डेटाबेस से भरी हुई है निकाल दिया जाता है।

इसे सभी को ZF2 में हुक करने के लिए, आपको कुछ चीजें करने की आवश्यकता होगी।

सबसे पहले, एक सिद्धांत के स्वाद घटना श्रोता लिखें:

<?php 
class InjectStuffListener { 
    private $sl; 

    public function __construct($serviceLocator){ 
     $this->sl = $serviceLocator; 
    } 

    public function postLoad($eventArgs){ 
     $entity = $eventArgs->getEntity; 
     $entity->setThingToBeInjected($this->sl->get('some.thing')); 
    } 
} 

फिर, कुछ Module.php की तरह किसी ऐसे स्थान में (शायद वहाँ onBootstrap तुलना में एक बेहतर जगह है, लेकिन जो कुछ भी):

<?php 
public function onBootstrap(){ 
    $sm = $e->getApplication()->getServiceManager(); 
    $em = $sm->get('doctrine.entitymanager.orm_default'); 
    $dem = $em->getEventManager(); 
    $dem->addEventListener(array(\Doctrine\ORM\Events::postLoad), new InjectStuffListener($sm)); 

} 
+0

इकाइयों में कुछ इंजेक्ट करने के लिए अब और आवश्यकता नहीं है, लेकिन मैं नहीं देख सकता कि मैं ZF2 द्वारा प्रबंधित किए जा सकने वाले निर्भरताओं को इंजेक्ट करने के लिए इसे ZF2 सेवा लोकेटर/सेवा प्रबंधक से कैसे जोड़ सकता हूं। इकाई स्वयं सेवा लोकेटर के बारे में नहीं जानती क्योंकि यह सेवा लोकेटर के माध्यम से तत्काल नहीं है। – griesi

+0

@griesi - कुछ उदाहरण कोड के लिए मेरा संपादन देखें जो श्रोताओं को प्रारंभ करता है और उन्हें ZF2 बूटस्ट्रैप के दौरान सिद्धांत के ईवेंट मैनेजर से जोड़ता है। – timdev

+0

धन्यवाद यह वास्तव में मैं – griesi