Magento 2: सहायकों का उचित उपयोग


9

मैं अधिक से अधिक लोगों को टेम्प्लेट फ़ाइलों में निम्नलिखित का उपयोग करने में सक्षम होने के लिए हेल्पर्स क्लासेस की घोषणा करना शुरू कर रहा हूं:

$this->helper('Path/To/Helper/Class')->customMethod();

इस तरह का कोड लोगों को ऑब्जेक्ट प्रबंधक को सीधे प्रतिबंध का उपयोग नहीं करने देता है, लेकिन मैं उन कोड को देखना चाहता हूं जो उन सहायकों में कोड को ब्लॉक करना चाहिए।

तो यहाँ मेरे सवाल हैं:

  • सहायक वर्गों में क्या लिखना चाहिए?
  • किन मामलों में टेम्पलेट्स में सहायक विधियों का उपयोग करना प्रासंगिक है?

जवाबों:


20

मत करो।
यह ObjectManager::getInstance()->create()एक टेम्पलेट में उपयोग करने जैसा है !
एक कस्टम ब्लॉक का उपयोग करें जो एक कंस्ट्रक्टर निर्भरता के रूप में सहायक को प्राप्त करता है, और एक प्रॉक्सी विधि जोड़ें जो सहायक विधि को कहता है।

टेम्पलेट में:

$block->customMethod()

ब्लॉक में:

public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
    $this->helper = $helperClass;
    // ...other assignments and call to parent::__construct()
}

public function customMethod()
{
    return $this->helper->customMethod();
}

ओओपी सिद्धांत में "कानून के कानून" का उल्लंघन करने से बचा जाता है। यह टेम्प्लेट के बजाय ब्लॉक में व्यापारिक तर्क को एन्क्रिप्ट करता है। एक साइड इफेक्ट के रूप में यह लॉजिक को अधिक टेस्टी बनाता है क्योंकि लॉजिक को ब्लॉक में ले जाया जाता है।

हेल्पर वर्गों में किस तर्क के बारे में, मुझे लगता है कि मैगनेटो में 2 मददगार ज्यादातर सेवाओं के लिए समझ में आते हैं, जैसे कि कुछ ऐसा है जो मॉडल नहीं है, लेकिन पुन: प्रयोज्य कोड है, उदाहरण के लिए मूल्य स्वरूपण (जो कोर में निहित है, लेकिन मैं 'अभी एक बेहतर उदाहरण के बारे में सोचो)।


मैं सिद्धांत से सहमत हूं, हालांकि यह दिखता है कि di.xmlब्लॉक वर्ग प्रकार के लिए वरीयता का उपयोग करते हुए , कुछ लेआउट कॉन्फ़िगरेशन को न रखें। मैंने उदाहरण के लिए इसे कक्षा के लिए करने की कोशिश की \Magento\Catalog\Block\Product\View\Type\Simple, default.phtmlहमारे टेम्पलेट में उपयोग किए गए टेम्पलेट को अनदेखा किया गया है। इस समय कोई सुराग नहीं
सिल्वेन रेई

2
अधिक जानकारी के लिए यहां कूदना। 2.2 के अनुसार, ब्लॉक कक्षाओं का विस्तार करने की अनुशंसा नहीं की जाती है। इसके बजाय, यदि कस्टम प्रस्तुति तर्क आवश्यक है, तो एक ViewModel को परिभाषित किया जाना चाहिए और लेआउट में ब्लॉक के तर्क के रूप में घोषित किया जाना चाहिए। xml। चूंकि ViewModels ऑब्जेक्ट मैनेजर के माध्यम से बनाया गया है, इसलिए आप अपने स्वयं के निर्भरता ग्राफ को अपने आप को उजागर कर सकते हैं बिना बीसी को मैगेंटो के भविष्य के रिलीज में परिवर्तन तोड़ सकते हैं।
जॉन हॉल

1

मैं आपके मॉड्यूल के अंदर वैश्विक कार्यों के रूप में सहायकों को देखता हूं (शब्द 'ग्लोबल' के लिए खेद है), और प्रबंधकों / सेवा अनुबंधों को वैश्विक कार्यों के रूप में उपयोग करने की अनुमति है जो आपके मॉड्यूल के अंदर भी उपयोग करते हैं।

यदि आप इस सिद्धांत का पालन करते हैं, तो आप देखेंगे कि सहायकों के लिए न्यूनतम उपयोग है, मैं केवल अपने मॉड्यूल में कॉन्फ़िगरेशन आवरण के रूप में उनका उपयोग करता हूं।

$this->configHelper->get(Config::PATH_TO_XML_PATH);
$this->configHelper->isEnabled();

इस तरह का सामान। यदि आपके पास कोई अन्य कार्यक्षमता है जो आपके मॉड्यूल के बाहर व्यावहारिक हो सकती है, तो इसके बजाय एक प्रबंधक बनाएं।

एक आदर्श दुनिया में, तीसरे पक्ष के डेवलपर्स जिन्हें अन्य मॉड्यूल की कार्यक्षमता की आवश्यकता होती है, उन्हें केवल रिपॉजिटरी और प्रबंधकों के लिए उपलब्ध इंटरफेस में और इन- Apiफोल्डर में सामान को देखना चाहिए ।

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