การสกัดกั้นใน magento2 แทนที่ผู้สังเกตการณ์ใน magento1 หรือไม่


9

การสกัดกั้นตั้งใจที่จะเป็นวิธีที่ต้องการเมื่อจัดการกับการเปลี่ยนพฤติกรรมของวิธีการดั้งเดิมใน Magento2 ในฐานะผู้สังเกตการณ์ใน magento1 หรือไม่?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception

คำตอบ:


16

ฉันไม่คิดว่าการสกัดกั้นมีวัตถุประสงค์เพื่อแทนที่ผู้สังเกตการณ์เหตุการณ์
ยังมีเหตุการณ์ที่ส่งมอบในรหัส Magento2

ตัวดักจับเป็นเพียงวิธีการประมวลผลอินพุตหรือเอาต์พุตของเมธอด
หรือพฤติกรรมของวิธีการ (ใช้ตัวaroundดัก) แต่จากสิ่งที่ฉันเข้าใจว่านี่เป็นวิธีที่มีความเสี่ยง

ฉันคิดว่ามันเป็นวิธีที่หลีกเลี่ยงการเขียนคลาสมากที่สุด
ใน Magento 1.x หากคุณต้องการแก้ไขผลลัพธ์ของวิธีที่คุณต้องการเพื่อแทนที่คลาสที่มีและวิธีนั้น
ตอนนี้คุณก็สามารถใช้before, afterหรือaroundดักในการจัดการข้อมูล

ด้วยผู้สังเกตการณ์คุณสามารถจัดการข้อมูลในบางจุดคงที่ของวิธีการไม่ใช่วิธีการแบบเต็ม

ในความคิดของฉันการใช้ผู้สังเกตการณ์เมื่อเป็นไปได้ยังคงเป็นวิธีที่ดีที่สุดในการปรับแต่งแม้ใน Magento 2


2
ตกลง. การสกัดกั้นเป็นกลไกระดับล่าง แต่มันไม่ได้แทนที่เหตุการณ์ เหตุการณ์ให้อินเทอร์เฟซผู้ให้บริการในระดับที่สูงขึ้น
Anton Kril

6

การสกัดกั้นคือวิวัฒนาการของเหตุการณ์ เป้าหมายคือเพื่อให้นักพัฒนาสามารถเขียนโค้ดของเขาได้โดยไม่ต้องคิดถึงจุดส่วนขยาย

ด้วยเหตุการณ์ที่คุณต้องคิดเกี่ยวกับสถานที่ที่คุณทำ Mage :: dispatchEvent () เพื่อให้โมดูลของคุณจะสามารถปรับแต่งได้

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

แต่เหตุการณ์ให้บริการระดับสูงกว่าการให้บริการส่วนต่อประสานที่พูดภาษา ดังนั้นกิจกรรมจะอยู่ใน Magento 2


คุณช่วยได้รับข้อเท็จจริงที่สำคัญนี้ใน devdocs ซึ่งเป็นแหล่งที่มาของความสับสนโดยเฉพาะเมื่อคุณยังคงมีเหตุการณ์มากมายใน M2 ถ้าเรารู้ว่าเหตุการณ์ตายแล้วเราสามารถเขียนโค้ดได้ฉันก็จะไม่เห็นทุกที่ที่กล่าวถึงเรื่องนี้ในเอกสาร ในภาษาอื่นมีเหตุผลที่จะใช้เหตุการณ์บางครั้งและตัวสกัดกั้นบางครั้งฉันคิดว่าคุณต้องชี้แจงว่าวีโอไอพี 2 นั้นแตกต่างกัน
Karen Baker

5

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

หากคุณดูที่รีลีสปัจจุบันบางโมดูลมีevents.xmlไฟล์ที่มีคำจำกัดความ

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>

ในรูปแบบผู้สังเกตการณ์รุ่นล่าสุดของ Magento-2 ได้รับการเปลี่ยนแปลงแล้วตอนนี้คุณไม่จำเป็นต้องประกาศคุณสมบัติวิธีการใน events.xml ,, มันจะเรียกใช้วิธีการดำเนินการโดยอัตโนมัติเช่นตัวควบคุม
Keyur Shah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.