किसी भी वर्ग के निर्माता DI में संदर्भ वस्तु उद्देश्य क्या है? कैसे काम करता है?


23

अधिकांश कक्षा के कंस्ट्रक्टर्स में, एक संदर्भ वस्तु पारित हो जाती है। मैं समझ नहीं पा रहा था कि यह प्रसंग ओब्ज कैसे काम करता है। मैंने यह भी देखा कि कभी-कभी यह नीचे की तरह पैरेंट क्लास के कंस्ट्रक्टर को पास कर दिया जाता है।

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\Design $catalogDesign,
    \Magento\Catalog\Model\Session $catalogSession,
....
    parent::__construct(
        $context,
        $layoutFactory,

क्या आप बता सकते हैं कि यह विशिष्ट संदर्भ वस्तु कैसे काम करती है?

जवाबों:


30

ध्यान दें कि विभिन्न संदर्भ वस्तुएं हैं, इस मामले में यह है \Magento\Framework\App\Action\Contextऔर इसे समझने के लिए, आपको इसे "ActionContext" के रूप में पढ़ना चाहिए। यह एप्लिकेशन संदर्भ का प्रतिनिधित्व करता है जिसमें कार्रवाई निष्पादित होती है। दूसरे शब्दों में, यह आपको एप्लिकेशन स्टेट के साथ सभी ऑब्जेक्ट्स तक पहुंच प्रदान करता है जो एक नियंत्रक कार्रवाई की आवश्यकता होती है, उदाहरण के लिए रजिस्ट्री या अनुरोध ऑब्जेक्ट।

संदर्भ कक्षाओं की अपनी कार्यक्षमता नहीं है, वे अन्य वस्तुओं के लिए सिर्फ एक कंटेनर हैं। आप उन्हें प्रत्येक नियंत्रक क्रिया में 20 पैरामीटर नहीं होने के शॉर्टकट के रूप में देख सकते हैं। सभी सामान्य मापदंडों को संदर्भ वस्तु में मिला दिया जाता है।


मैं कैसे जान सकता हूं कि कौन सी वस्तु अलग-अलग है $context?
लुकस्कु

@ लुकस उनके सोर्स कोड को देखते हैं। आप संदर्भ
रचनाकार

15

तृतीय पक्ष डेवलपर्स को अमूर्त वर्गों के रचनाकारों में परिवर्तन से अलग करने के लिए प्रसंग वस्तुएं पेश की गईं।

मैगेंटो में 1 "हेल्पर" व्यवहार के साथ 1 सार वर्ग को क्लास एक्सटेंडर के लिए एक सुविधाजनक एपीआई माना जाता था। तरीकों और सार वर्गों में निहित निर्भरता के इस वजह से बड़ी संख्या ( AbstractModel, AbstractBlock, AbstractAction)

Magento में 2 विरासत आधारित API (अधिक सटीक SPI) हतोत्साहित किए जाते हैं, लेकिन कई विरासत API अभी भी मौजूद हैं। शुरू में हमने अमूर्त वर्गों से अतिरिक्त व्यवहार को धीरे-धीरे हटाने की योजना बनाई। और सभी एक्सटेंडर को नहीं तोड़ने के लिए जब हम कंस्ट्रक्टर से कुछ निर्भरता को हटा देंगे, तो हमने कॉनटेक्स्ट ऑब्जेक्ट पेश किए।

वर्तमान योजना कुछ बिंदु पर इंटरफ़ेस आधारित एपीआई के साथ वंशानुक्रम आधारित एपीआई को छोड़ने के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.