Magento 1 Class Rewrite ใน Magento 2 พร้อมระบบฉีดพึ่งพา


10

เมื่อมองไปรอบ ๆโค้ดหลักของ Magento 2ดูเหมือนว่าระบบการเขียนคลาสเก่าได้ถูกคัดลอกและแทนที่ด้วยระบบการฉีดขึ้นรูปใหม่

น่าเสียดายที่ไม่มีเอกสารสำหรับระบบใหม่นี้

ไม่มีใครมีตัวอย่างการกำหนดค่าโมดูลที่จะช่วยให้ผู้ใช้ใน Magento 2, "เขียน" คลาสที่Mage_Catalog_Model_Productมีคลาสใหม่Packagename_Modulename_Model_Productโดยใช้ระบบการฉีดพึ่งพาใหม่หรือไม่


ฉันคิดว่าคำถาม Magento 2.0 ยังไม่ได้รับอนุญาต แต่meta.magento.stackexchange.com/questions/79/…
Marius

คำตอบ:


10

การกำหนดค่า Di ถูกย้ายไปยังไฟล์ di.xml และรูปแบบได้รับการแก้ไข ตอนนี้การตั้งค่ามีลักษณะเช่นนี้ (di.xml):

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

ถ้าเป็นการเขียนคลาสมันจะดีกว่าถ้าใช้ปลั๊กอินแทนโหนดการกำหนดค่าตามความชอบหรือไม่?
huzefam

2
หากคุณต้องการแทนที่พฤติกรรมของคลาสแกนกลางบางคลาสคุณควรใช้ค่ากำหนด หากคุณต้องการแทนที่พฤติกรรมของวิธีการหลักบางอย่างคุณควรใช้ปลั๊กอินที่มีฟังรอบที่จะไม่เรียก $ ดำเนินการ () หากคุณต้องการเพิ่มพฤติกรรมให้กับวิธีการหลักหรือคลาสคุณควรใช้ปลั๊กอิน
Anton Kril

5

จากการทำงานจากภายในสู่ภายนอกฉันสามารถเขียนซ้ำการทำงานกับสิ่งต่อไปนี้

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

อย่างไรก็ตามมีรหัสของระบบจำนวนมากในการติดตั้งระบบการฉีดแบบพึ่งพาดังนั้นจึงไม่ชัดเจนว่าข้อมูลข้างต้นจะใช้ได้กับ Magento 2 รุ่นที่วางจำหน่ายครั้งสุดท้าย


ดังนั้นดูเหมือนว่าพวกเขาเปลี่ยนชื่อ "นามแฝง" เป็นค่ากำหนดและย้ายไปด้านบนใช่ไหม น่าสนใจ ฉันรอคอยที่จะได้เห็นการอัปเดตของเอกสารประกอบ ปีเตอร์บอกว่าพวกเขามีมัน แต่มันไม่ได้ถูกผลักออกไปยังเว็บไซต์เอกสารอย่างน้อย IIRC
davidalger

5

คุณถูกต้องการเขียนคลาสใหม่จะถูกกำจัดและแทนที่ด้วย DI หมายเหตุต่อไปนี้มาจากส่วนการเปลี่ยนแปลง Application Framework :

Magento 1.x - Node: / global // {sub-path ซึ่งสอดคล้องกับชื่อโรงงาน + "rewrite" ตามตัวอักษร}

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

Magento 2.x - Node: / global / di / aliases

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

ฉันไม่ได้ลองใช้สิ่งนี้ในโมดูลที่ทำงานใน Magento 2.0 แต่ดูเหมือนว่าคุณจะกำหนดนามแฝงสำหรับชื่อคลาสแทนการใช้ลำดับชั้นที่ซับซ้อนของ xml สำหรับการเขียนต่อโมดูล


1
+1 สำหรับหน้า Application Framework แต่ไม่สามารถใช้งานได้ในภาพรวม Magento 2 ล่าสุดที่ฉันจับได้
Alan Storm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.