Magento 1 क्लास रीवराईट मैगेंटो 2 में डिपेंडेंसी इंजेक्शन सिस्टम के साथ


10

Magento 2 के मुख्य कोड के आसपास , ऐसा लग रहा है कि पुरानी श्रेणी के रीराइट सिस्टम को बाहर निकाल दिया गया है और एक नई निर्भरता इंजेक्शन प्रणाली के साथ बदल दिया गया है।

दुर्भाग्य से, इस नई प्रणाली के लिए कोई दस्तावेज नहीं है।

क्या किसी के पास एक मॉड्यूल कॉन्फ़िगरेशन नमूना है जो एक उपयोगकर्ता को, मैगेंटो 2 में, नई निर्भरता इंजेक्शन प्रणाली का उपयोग करके, Mage_Catalog_Model_Productएक नए वर्ग के साथ "फिर से लिखना" देगा Packagename_Modulename_Model_Product?


मैंने सोचा था कि Magento 2.0 सवालों की अनुमति नहीं थी अभी तक meta.magento.stackexchange.com/questions/79/...
मारिअस

जवाबों:


10

Di कॉन्फ़िगरेशन को di.xml फ़ाइलों में ले जाया गया, और प्रारूप को संशोधित किया गया। अब वरीयताएँ इस तरह दिखती हैं (di.xml):

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

यदि यह एक वर्ग पुनर्लेखन है, तो क्या वरीयता नोड के बजाय एक प्लगइन का उपयोग करना बेहतर है?
हुजफेम

2
यदि आपको कुछ मुख्य वर्ग के व्यवहार को बदलने की आवश्यकता है, तो आपको वरीयता का उपयोग करना चाहिए। यदि आपको कुछ मुख्य विधि के व्यवहार को बदलने की आवश्यकता है, तो आपको लगभग श्रोता के साथ प्लगइन का उपयोग करना चाहिए जो $ कार्यवाही नहीं करेगा ()। यदि आपको किसी मूल विधि या वर्ग में व्यवहार जोड़ने की आवश्यकता है, तो आपको प्लगइन्स का उपयोग करना चाहिए।
एंटोन क्रिल

5

अंदर से बाहर काम करते हुए, मैं निम्नलिखित के साथ फिर से काम करने में सक्षम था

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

हालाँकि, निर्भरता इंजेक्शन कार्यान्वयन में बहुत अधिक सिस्टम कोड है, इसलिए यह स्पष्ट नहीं है कि उपरोक्त Magento 2 के अंतिम रिलीज़ किए गए संस्करण में काम करेगा या नहीं।


तो ऐसा लगता है कि उन्होंने मूल रूप से "उपनाम" को वरीयताओं में बदल दिया और इसे शीर्ष पर ले गए? दिलचस्प। मैं प्रलेखन रोल के अद्यतन को देखने के लिए उत्सुक हूं। पीटर ने कहा कि उनके पास यह है, लेकिन इसे सभी डॉक्स साइट पर नहीं धकेला गया है, कम से कम IIRC।
davidalger

5

आप सही हैं, वर्ग पुनर्लेखन को पूरी तरह से समाप्त कर दिया गया और डीआई के साथ बदल दिया गया। निम्न रूपरेखाएँ अनुप्रयोग रूपरेखा परिवर्तन पर अनुभाग से हैं :

Magento 1.x - नोड: / वैश्विक // {उप-पथ जो कारखाने के नाम से मेल खाता है + "फिर से लिखना" शाब्दिक}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x - नोड: / वैश्विक / di / उपनाम

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

मैंने Magento 2.0 में चल रहे एक मॉड्यूल में इसका उपयोग करने की कोशिश नहीं की है, लेकिन ऐसा प्रतीत होता है कि आप मूल रूप से प्रति-मॉड्यूल पुनर्लेखन के लिए xml की जटिल पदानुक्रम का उपयोग करने के बजाय वर्ग नाम के लिए एक उपनाम परिभाषित करते हैं।


1
एप्लिकेशन फ़्रेमवर्क पृष्ठ के लिए +1, लेकिन यह नवीनतम मैगनेटो 2 स्नैपशॉट I के कब्जे में काम नहीं करता है।
एलन स्टॉर्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.