Magento 2 - मैं किस मामले में di.xml और मॉड्यूल के लिए di.xml का उपयोग कैसे करूं?


12

Magento 2 में, मैं किस मामले का उपयोग करता हूं di.xmlऔर di.xmlमॉड्यूल के लिए कैसे उपयोग करूं?

किसी को भी पता था, कृपया मुझे कदम से कदम दिखाओ।


2
आप Magento के आधिकारिक साइट से अधिक जानकारी प्राप्त कर सकते हैं: devdocs.magento.com/guides/v2.0/extension-dev-guide/…
सुरेश

जवाबों:


54

What case We use di.xml ?

  • हम किसी विशेष वर्ग की प्राथमिकता के लिए (पुनः लिखना) di.xml का उपयोग कर सकते हैं।
  • हम नए या मौजूदा वर्ग तर्कों को भेज सकते हैं ।
  • फ़ंक्शन से पहले और बाद में कुछ सामान करने के लिए प्लगइन्स का उपयोग करें
  • VirtualTypes का उपयोग करके किसी अन्य वर्ग के उप-वर्ग का निर्माण करना।

हमें Magento 2 ग्राहक मॉड्यूल से एक त्वरित उदाहरण लेते हैं।

1.Preference

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

कोड से ऊपर, जब कोई आपको तुरंत बताने के लिए कहता है तो Magento\Customer\Api\AddressRepositoryInterfaceयह एक Magento \ Customer \ Model \ ResourceModel \ AddressRepository ऑब्जेक्ट (प्रकार विशेषता) को तुरंत हटा देगा।

कक्षा वरीयता विन्यास केवल उन इंटरफेस के लिए नहीं है जिन्हें हम वास्तविक कक्षाओं में भी बदल सकते हैं।

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

आप 'CustomerMagement' के लिए 'customModel' क्लास बना सकते हैं और बदलाव कर सकते हैं। कक्षा पुनर्लेखन प्रणाली के प्रतिस्थापन के रूप में कक्षा वरीयता प्रणाली।

http://alanstorm.com/magento_2_object_manager_preferences

2. तर्क

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

उपर्युक्त कोड में, हम ऑब्जेक्ट को एक तर्क के रूप में भेज रहे हैं, हम सिस्टम को "प्रॉक्सी" क्लास के नाम के साथ ऑब्जेक्ट के रूप में सम्मिलित करने के लिए कह रहे हैं groupManagement। इसके अलावा, हम मौजूदा तर्क को भी बदलने के लिए तर्क का उपयोग कर सकते हैं।

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. प्लगिन

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

उपरोक्त कोड में, public function clean($object)विज़िटर वर्ग को सार्वजनिक फ़ंक्शन के बाद कहा जाता है afterClean(Visitor $subject, $logResourceModel)जो लॉग क्लास में है।

4 आभासी प्रकार

वर्चुअल टाइप बनाना किसी मौजूदा क्लास के लिए सब-क्लास बनाने जैसा है।

अधिक जानकारी के लिए कृपया उन व्यावहारिक उदाहरणों से गुजरें जिन्हें मैंने एलन के लिंक के रूप में उल्लेख किया है, अभ्यास से आप अधिक स्पष्ट अनुभव प्राप्त कर सकते हैं।

उम्मीद है की यह मदद करेगा.... :)


1
क्या आप सक्षम / अक्षम मॉड्यूल प्रक्रिया के लिए di.xml में ifconfig के साथ सेट कॉन्फ़िगरेशन के बारे में कोई विचार रखते हैं? यदि आप इसके बारे में कृपया मुझे समस्या को हल करने में मदद करें।
कार्तिक आसोदरिया

बहुत उपयोगी जानकारी।
शिवम

2
कोई इन सब चीजों को कैसे सीखता है?
मोहम्मद जोरेद

तो <वरीयता> "के लिए" में वर्ग को कॉल करने के बजाय, यह कक्षा को "प्रकार" या कुछ और में बुलाता है? मैं अभी भी इस बारे में भ्रमित हूँ। @@
3

3
ओह एनवीएम, मुझे यह बहुत अच्छा जवाब मिला। inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.