Magento 2: किस विस्तार तंत्र को चुनना है?


9

हम दो तरीकों से नियंत्रक का विस्तार कर सकते हैं: वरीयता का उपयोग करना और प्लगइन का उपयोग करना। लेकिन मुझे यह समझ में नहीं आता है, कि कौन सा अच्छा है और वरीयता बनाम प्लगइन के फायदे / नुकसान हैं।

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

जवाबों:


11

जब भी संभव हो, प्लगइन्स का उपयोग करें, फिर पर्यवेक्षकों ( प्रत्येक के पेशेवरों और विपक्षों को देखें ), यह आपको अन्य एक्सटेंशन (3 डी पार्टी मॉड्यूल) के साथ संघर्ष से बचने की अनुमति देगा।

वरीयता का उपयोग केवल तभी किया जाना चाहिए जब पूरे कोर वर्ग / इंटरफ़ेस कार्यान्वयन को कस्टम एक के साथ प्रतिस्थापित किया जाना चाहिए। इस बात का ध्यान रखें कि किसी भी समय केवल एक वरीयता सक्रिय है (जो किसी एक को परिभाषित अनुक्रम द्वारा परिभाषित किया गया है module.xml), इसलिए यदि कोई अन्य एक्सटेंशन उसी वर्ग / इंटरफ़ेस के लिए वरीयता को परिभाषित करता है, तो एक संघर्ष होगा (ये एक्सटेंशन एक साथ काम नहीं कर सकते हैं)।


4
  • यदि आपकी कार्यक्षमता पूरी तरह से कोर कार्यक्षमता को बदल देती है तो आप वरीयताओं का उपयोग कर सकते हैं।
  • यदि आप कार्यक्षमता को आधार से जोड़ना चाहते हैं या आंशिक रूप से कुछ वर्ग विधि को बदलना चाहते हैं तो कृपया प्लगइन्स का उपयोग करें।

1
ध्यान दें कि यदि आप कोर कार्यक्षमता को प्रतिस्थापित करते हैं तो बोझ आप पर है कि आप कोर अपडेट की निगरानी करें और सुनिश्चित करें कि आपके कस्टम मॉड्यूल अद्यतित हैं
रॉबी एवरिल

1

एडिटिव इन्फोस: इंटर्न एम 2 में उपयोग की जाने वाली लगभग सभी प्राथमिकताएं बस आधार कंक्रीट क्लास और इंटरफ़ेस के बीच संबंध रखने के लिए हैं, जैसे:

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

जैसा कि आप समझते हैं कि यह एक बार इस्तेमाल किया गया है, मुझे लगता है:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.