Magento 2: प्लगइन बनाम ऑब्जर्वर


27

Magento 2 में, कुछ हासिल करने के लिए एक पर्यवेक्षक बनाम प्लगइन का उपयोग करने के पेशेवरों और विपक्ष क्या हैं?

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


प्रेक्षक बहुत सीमित होगा, लेकिन आप सभी सार्वजनिक कार्यों के लिए बदलाव करते हैं
प्रदीप कुमार

जवाबों:


42

प्लगइन्स सर्वव्यापी हैं क्योंकि सिस्टम में किसी भी सार्वजनिक पद्धति के व्यवहार को संशोधित / बदलना संभव है। @apiजब भी संभव हो , एनोटेशन (स्थिर सार्वजनिक एपीआई) के साथ चिह्नित सार्वजनिक विधियों / कक्षाओं के लिए प्लगइन्स का उपयोग करके अनुकूलन किया जाना चाहिए । इस तरह के दृष्टिकोण की गारंटी है कि नए Magento के रिलीज के बाद अनुकूलन कार्यात्मक रहेगा। प्रश्न में उल्लिखित before/ afterप्लगइन्स के अलावा , aroundमूल व्यवहार को बदलने के लिए प्लगइन्स बनाना संभव है ।

दूसरी ओर, पर्यवेक्षक मैगेंटो 1 से विरासत में प्राप्त विरासत विस्तार तंत्र हैं, यह बहुत सीमित है और यदि संभव हो तो इसे टाला जाना चाहिए। हालांकि, प्लगइन्स के विपरीत, वे संरक्षित / निजी तरीकों के अंदर विस्तार बिंदु प्रदान कर सकते हैं।


वरीयताओं बनाम प्लगइन्स / पर्यवेक्षकों के बारे में बात करने वाले उत्तर पर एक नज़र डालें: magento.stackexchange.com/a/94035/697 , उपयोगी हो सकता है।
एलेक्स पालिरुष

@alex: - प्रोटेक्टेड फंक्शन के लिए प्लगइन कैसे लिखें, उस स्थिति में अधिकांश प्रोटेक्टेड प्रोटेक्टेड फंक्शन को ओवरराइड करने की आवश्यकता होती है, इसे कैसे करें? magento.stackexchange.com/questions/91353/…
प्रदीप कुमार

@PradeepKumar प्लगइन्स को केवल सार्वजनिक तरीकों से जोड़ा जा सकता है। आपके द्वारा उल्लिखित प्रश्न का उत्तर है, लेकिन प्रस्तावित समाधान अवरुद्ध है लेकिन ज्ञात समस्या (प्लगइन्स को आभासी प्रकारों पर लागू नहीं किया जा सकता है)। अस्थायी वर्कअराउंड के रूप में आप फ्रेमवर्क URL क्लास के लिए प्लगइन की घोषणा कर सकते हैं और वहाँ तर्क के आधार पर सशर्त तर्क जोड़ सकते हैं (ताकि प्लगइन केवल आपके मामले पर कुछ करता है)
एलेक्स पलियुरुष

i jut ने एक उदाहरण दिया, उस मामले में संरक्षित में बहुत सारे कार्य हैं कि कैसे ओवरराइड करें, किसी भी तरह से मैं संरक्षित कार्य को ओवरराइड कर सकता हूं
प्रदीप कुमार

@PradeepKumar यदि आपको एक संरक्षित पद्धति को ओवरराइड करने की आवश्यकता है तो आपको कक्षा का विस्तार करने और वरीयता / पुनर्लेखन का उपयोग करने की आवश्यकता हो सकती है। वैसे भी, सुझाव है कि आप इन टिप्पणियों के बजाय इसके लिए एक प्रश्न पूछें
रोबी एवरिल

1

Magento के तकनीकी गाइड ( https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events ) के अनुसार: सभी मान (ऑब्जेक्ट्स सहित) किसी ईवेंट में पास किए गए होना आवश्यक नहीं है। घटना पर्यवेक्षक में संशोधित। इसके बजाय, प्लगइन्स एक फ़ंक्शन के इनपुट या आउटपुट को संशोधित करने के लिए इस्तेमाल किया जाना चाहिए।

मेरे लिए प्लगइन्स और पर्यवेक्षकों के बीच मुख्य अंतर यह है:

  1. प्लगइन्स केवल सार्वजनिक तरीकों को संशोधित कर सकते हैं जबकि पर्यवेक्षक निजी, संरक्षित भी संशोधित कर सकते हैं।
  2. प्लगइन्स के लिए क्रमबद्ध क्रम है, लेकिन पर्यवेक्षकों के लिए कोई क्रम नहीं है।
  3. आप केवल उन घटनाओं में पर्यवेक्षक जोड़ सकते हैं जो पहले से ही Magento में भेजे गए हैं। प्लगइन्स यहां अधिक लचीले हैं।

मैं सही पर एक पर्यवेक्षक के साथ एक आदेश भी अद्यतन कर सकता हूं?
रोबी एवेरिल

@RobbieAverill हाँ, आप checkout_submit_all_afterघटना के लिए एक पर्यवेक्षक बना सकते हैं । आदेश सफलतापूर्वक रखे जाने के बाद आपके पर्यवेक्षक को ट्रिगर किया जाएगा।
ट्रांसवर्सस

क्या इसका मतलब यह है कि "वे डेटा को संशोधित नहीं करते हैं" उस मामले में सच नहीं है?
रोबी एवेरिल

1
हां आप सही हैं @RobbieAverill प्लगइन्स और पर्यवेक्षक दोनों डेटा को संशोधित कर सकते हैं। मेरे लिए प्लगइन्स और पर्यवेक्षकों के बीच मुख्य अंतर यह है: 1. प्लगइन्स केवल सार्वजनिक तरीकों को संशोधित कर सकते हैं जबकि पर्यवेक्षक निजी, साथ ही संरक्षित कर सकते हैं। 2. प्लगइन्स के लिए क्रमबद्ध क्रम है, लेकिन पर्यवेक्षकों के लिए कोई क्रम नहीं है। 3. आप केवल उन घटनाओं में पर्यवेक्षक जोड़ सकते हैं जो पहले से ही Magento में भेजे गए हैं। प्लगइन्स यहां अधिक लचीले हैं।
ट्रांसवर्सस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.