Magento 2 - กรณีใดฉันจะใช้ di.xml และวิธีใช้ di.xml สำหรับโมดูล


12

ใน Magento 2 ฉันต้องใช้อะไรdi.xmlและจะใช้di.xmlกับโมดูลได้อย่างไร

ใครรู้กรุณาแสดงทีละขั้นตอน


2
คุณสามารถรับข้อมูลเพิ่มเติมได้จากเว็บไซต์ทางการของวีโอไอพี: devdocs.magento.com/guides/v2.0/extension-dev-guide/…
Suresh Chikani

คำตอบ:


54

What case We use di.xml ?

  • เราสามารถใช้ di.xml สำหรับการตั้งค่า (เขียนซ้ำ) ของคลาสเฉพาะ
  • เราสามารถส่งใหม่หรือเปลี่ยนระดับที่มีอยู่ข้อโต้แย้ง
  • ใช้ปลั๊กอินเพื่อทำบางสิ่งบางอย่างก่อนหลังและรอบฟังก์ชั่น
  • โดยใช้ virtualTypes สร้างคลาสย่อยของคลาสอื่น

ให้เรานำตัวอย่างรวดเร็วจากโมดูลลูกค้า Magento 2

1.Preference

<preference for="Magento\Customer\Api\AddressRepositoryInterface"
            type="Magento\Customer\Model\ResourceModel\AddressRepository" />

โค้ดด้านบนเมื่อมีคนขอให้คุณยกตัวอย่างMagento\Customer\Api\AddressRepositoryInterfaceมันจะยกตัวอย่างวัตถุ Magento \ Customer \ Model \ ResourceModel \ AddressRepository (แอตทริบิวต์ type)

การกำหนดค่าตามความชอบของชั้นเรียนไม่ได้มีไว้สำหรับอินเทอร์เฟซเท่านั้นเราสามารถเปลี่ยนคลาสจริงได้เช่นกัน

<preference for="Magento\Customer\Model\CustomerManagement"
            type="Magento\Customer\Model\customModel" />

คุณสามารถสร้างคลาส 'customModel' สำหรับ 'CustomerManagement' และทำการเปลี่ยนแปลง ระบบการตั้งค่าระดับแทนการใช้ระบบการเขียนคลาสใหม่

http://alanstorm.com/magento_2_object_manager_preferences

2. ข้อโต้แย้ง

<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
    <arguments>
        <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
    </arguments>
</type>

ในโค้ดข้างต้น, th เราจะส่งวัตถุเป็นอาร์กิวเมนต์ที่เรากำลังพูดระบบเพื่อแทรก "พร็อกซี่" groupManagementชั้นเป็นวัตถุที่มีชื่อของที่ นอกจากนี้เราสามารถใช้อาร์กิวเมนต์เพื่อแทนที่อาร์กิวเมนต์ที่มีอยู่ด้วย

http://alanstorm.com/magento_2_object_manager_argument_replacement

3. ปลั๊กอิน

<type name="Magento\Customer\Model\ResourceModel\Visitor">
    <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>

ในรหัสข้างต้น public function clean($object)ในชั้นผู้เข้าชมจะเรียกว่าหลังจากฟังก์ชั่นสาธารณะafterClean(Visitor $subject, $logResourceModel)ซึ่งอยู่ในชั้นเรียนเข้าสู่ระบบ

4 ประเภทเสมือน

การสร้างประเภทเสมือนนั้นเหมือนกับการสร้างคลาสย่อยสำหรับคลาสที่มีอยู่

หากต้องการทราบเพิ่มเติมโปรดดูตัวอย่างการปฏิบัติที่ฉันพูดถึงเป็นลิงก์จากอลันโดยการฝึกฝนคุณจะได้รับประสบการณ์ที่ชัดเจนยิ่งขึ้น

หวังว่านี่จะช่วย .... :)


1
คุณมีความคิดใดบ้างเกี่ยวกับการกำหนดค่าชุดด้วย ifconfig ใน di.xml สำหรับการเปิด / ปิดการใช้งานกระบวนการโมดูล ถ้าคุณเกี่ยวกับเรื่องนั้นโปรดช่วยฉันแก้ไขปัญหา
Kartik Asodariya

ข้อมูลที่มีประโยชน์มาก
Shivam

2
มีคนเรียนรู้สิ่งเหล่านี้ทั้งหมดได้อย่างไร
Mohammed Joraid

ดังนั้น <preference> แทนที่จะเรียกคลาสใน "for" มันเรียก class เป็น "type" หรืออะไรบางอย่าง? ฉันยังคงสับสนเกี่ยวกับเรื่องนี้ @@
fudu

3
โอ้ nvm ฉันพบคำตอบที่ดีจริงๆที่นี่ inchoo.net/magento-2/overriding-classes-magento-2 :)
fudu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.