Magento 2: ส่วนขยายใดให้เลือกใช้


9

เราสามารถขยายคอนโทรลเลอร์ได้สองวิธี: การใช้การกำหนดค่าตามความชอบและการใช้ปลั๊กอิน แต่ฉันไม่เข้าใจว่าอันไหนดีและข้อดี / ข้อเสียของการตั้งค่า vs ปลั๊กอิน

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

เป็นไปได้ซ้ำกับMagento 2: Plugin vs Observer
7ochem

คำตอบ:


11

ใช้ปลั๊กอินเมื่อใดก็ตามที่เป็นไปได้จากนั้นผู้สังเกตการณ์ (ดูข้อดีข้อเสียของแต่ละอัน ) สิ่งนี้จะช่วยให้คุณหลีกเลี่ยงความขัดแย้งกับส่วนขยายอื่น ๆ (โมดูลบุคคลที่สาม)

ควรใช้การตั้งค่าเฉพาะในกรณีที่การใช้งานคลาส / อินเตอร์เฟสหลักทั้งหมดควรถูกแทนที่ด้วยแบบกำหนดเอง พิจารณาว่าการกำหนดค่าตามความชอบเดียวเท่านั้นที่ใช้งานได้ตลอดเวลา (อันใดอันหนึ่งที่กำหนดโดยลำดับที่กำหนดไว้ในmodule.xml) ดังนั้นหากส่วนขยายอื่นกำหนดการตั้งค่าสำหรับคลาส / อินเทอร์เฟซเดียวกันจะมีข้อขัดแย้ง (ส่วนขยายเหล่านี้ไม่สามารถทำงานร่วมกันได้)


4
  • หากฟังก์ชั่นของคุณแทนที่ฟังก์ชันการทำงานหลักอย่างสมบูรณ์คุณอาจใช้การกำหนดค่าตามความชอบ
  • หากคุณต้องการเพิ่มฟังก์ชันการทำงานให้กับฐานหรือแทนที่วิธีการเรียนบางส่วนแล้วโปรดใช้ปลั๊กอิน

1
ดูเหมือนจะระมัดระวังที่จะทราบว่าถ้าคุณเปลี่ยนฟังก์ชั่นหลักแล้วภาระก็อยู่ที่คุณในการตรวจสอบการอัปเดตหลักและให้แน่ใจว่าโมดูลที่กำหนดเองของคุณเป็นรุ่นล่าสุด
Robbie Averill

1

adittional infos: การตั้งค่าเกือบทั้งหมดที่ใช้ใน intern m2 เป็นเพียงเพื่อรักษาความสัมพันธ์ระหว่างคลาสคอนกรีตฐานและส่วนต่อประสานเช่น:

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

อย่างที่คุณคิดมันใช้ครั้งเดียวฉันคิดว่า:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.