जवाबों:
What case We use di.xml ?
हमें 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 आभासी प्रकार
वर्चुअल टाइप बनाना किसी मौजूदा क्लास के लिए सब-क्लास बनाने जैसा है।
अधिक जानकारी के लिए कृपया उन व्यावहारिक उदाहरणों से गुजरें जिन्हें मैंने एलन के लिंक के रूप में उल्लेख किया है, अभ्यास से आप अधिक स्पष्ट अनुभव प्राप्त कर सकते हैं।
उम्मीद है की यह मदद करेगा.... :)