รายการกิจกรรม Magento 2


16

มีรายการที่สมบูรณ์ของเหตุการณ์ใน Magento 2 หรือไม่? ฉันกำลังมองหาบางอย่างเช่นMagento Events Cheat Sheet (1.9)


นี่คือรายการกิจกรรมที่คุณพบเหตุการณ์ทั้งหมดใน magento2 advancedcheckout.com/blog/list-event-magento2.html
Jitendra Mohanta

คำตอบ:


18

ฉันรวบรวมรายการเหตุการณ์ Magento 2 โดยใช้

find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;

รายการแบ่งออกเป็น 2 ส่วนส่วนหนึ่งสำหรับเหตุการณ์คงที่และอีกส่วนหนึ่งสำหรับการเปลี่ยนแปลง

จากที่นี่กิจกรรมแบบสแตติกคือเหตุการณ์ทั้งหมดที่กำหนดด้วยชื่อเหตุการณ์แบบเต็มเช่น:

$this->_eventManager->dispatch('some_event');

เหตุการณ์แบบไดนามิกคือเหตุการณ์ทั้งหมดที่กำหนดด้วยชื่อเหตุการณ์แบบไดนามิกที่รันไทม์เช่น:

$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);

รายการอยู่ในสเปรดชีตเพื่อการอ่านที่ดีขึ้น ฉันเหลือ 2 บรรทัดหลังการแข่งขันเพื่อให้เข้าใจบริบทของกิจกรรมได้ดียิ่งขึ้น

รายการเดียวกันสามารถค้นหาได้ในMagento 2 repo อย่างเป็นทางการสำหรับ_eventManager->dispatch


รายการมีประโยชน์มาก แต่ดูเหมือนจะไม่สมบูรณ์ เหตุการณ์sales_order_save_afterตัวอย่างที่ค่อนข้างสำคัญสำหรับงานปัจจุบันของฉันหายไปและเมื่อคุณค้นหา Magento 2 repo คุณจะสังเกตเห็นว่าไม่มีdispatchเลย: github.com/magento/magento2/ ......ฉันยังไม่รู้ เหตุการณ์เหล่านี้ถูกส่งไปอย่างไร แต่ก็เป็นการดีที่จะรวมไว้ในรายการ
Jey DWork

คุณจะรู้ได้อย่างไรว่าชื่อเหตุการณ์นั้นไม่มีอยู่? บางทีคุณกำลังมองหาชื่อเทียบเท่าใน Magento 2 ด้วยชื่ออื่นหรือไม่?
mbalparda

ไม่แน่ใจว่าเรากำลังพูดถึงสิ่งเดียวกัน ฉันแค่สงสัยว่าทำไมกิจกรรมsales_order_save_after(เช่นเดียวกับตัวอย่าง) ไม่ปรากฏขึ้นในรายการ (และการค้นหา) นอกจากนี้มันยังไม่เหมือนเหตุการณ์แบบไดนามิก จากนั้นฉันก็คิดว่าจะเป็นไปได้อย่างไรที่จะรวมเหตุการณ์ดังกล่าวเพื่อให้ได้รายการที่สมบูรณ์มากขึ้น และแน่นอนว่าฉันแค่พูดถึง Magento 2 sales_order_save_afterเป็นเหตุการณ์ Magento 2 เท่าที่ฉันจะบอกได้
Jey DWork

14

เห็นได้ชัดว่าไม่ใช่แนวปฏิบัติที่ดี แต่ฉันให้ลิงค์เดียวซึ่งเป็นไปตามเหตุการณ์สำคัญใน Magento2

http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/

Ofcourse รายการเหตุการณ์ไม่สมบูรณ์ราวกับว่าคุณได้ทำงานกับ Magento 1.x ตรรกะการจัดส่งเหตุการณ์จะถูกเก็บไว้

  1. lib/internal/Magento/Framework/Model/AbstractModel.php โหลดก่อนและหลังเหตุการณ์ของโมเดล

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);

    บันทึกก่อนและหลังเหตุการณ์ของวัตถุจำลอง

    $this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());

    การลบวัตถุ

    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());

    การล้างวัตถุ

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. การจัดส่งตัวควบคุม

    lib / ภายใน / วีโอไอพี / กรอบ / แอป / Action / action.php

    $this->_eventManager->dispatch(
        'controller_action_predispatch_' . $request->getFullActionName(),
        $eventParameters
    );
    
    eg // controller_action_predispatch_checkout_cart_index
    
    
    $this->_eventManager->dispatch(
        'controller_action_postdispatch_' . $request->getFullActionName(),
        $eventParameters
    );
    eg // controller_action_postdispatch_checkout_cart_index
  3. เค้าโครงแสดงเหตุการณ์ส่วนหน้า

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. คอลเลกชันของโมเดล

    lib / ภายใน / วีโอไอพี / กรอบ / รุ่น / ResourceModel / Db / เก็บ / AbstractCollection.php

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
    
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);

มีเหตุการณ์ดังกล่าวมากมายและเป็นการรวมกันของเหตุการณ์ที่สร้างขึ้นอย่างชัดเจนและโดยนัยใน Magento2


สิ่งที่ดี! เราควรรวมคำตอบเพื่อให้ได้ทุกอย่างในที่เดียว คุณคิดอย่างไร?
mbalparda

คำตอบของคุณก็เพียงพอเช่นกัน
huzefam

1

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

ดังนั้นที่นี่มีวิธีที่ดีที่สุด (ในความคิดของฉันรู้นี้) ใช้ xDebug และตั้งจุดพักที่บรรทัด 56ในชั้นเรียนMagento\Framework\Event\Manager(อยู่ในlibโฟลเดอร์ไม่ใช่appโฟลเดอร์)

ในการดีบักของคุณเพียงแค่บอกให้"ประเมินและเข้าสู่ระบบ"$eventNameตัวแปรและดูเหตุการณ์ทั้งหมดที่แสดงในคอนโซลในขณะที่คุณโหลดหน้าเว็บ

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

จุดพักชื่อเหตุการณ์ ทำไมฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการรับกิจกรรมทั้งหมดที่ส่งมาจากการโหลดหน้าเว็บเพราะมันจะแสดงให้คุณเห็นเหตุการณ์ทั้งหมดที่ถูกจัดส่งโดยผู้ควบคุม ตัวควบคุมแต่ละตัวส่งเหตุการณ์ก่อนและหลังด้วยชื่อที่ประกอบด้วยที่มี FullActionName, RouteName และค่าเริ่มต้น postdispatch หนึ่ง ดูFramework\App\Actionระดับภายใต้การจัดส่ง ()วิธีการ


0

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

/vendor/magento/framework/Event/Manager.php

เพิ่มรหัสนี้ด้านล่างชื่อเหตุการณ์

$eventName = mb_strtolower($eventName);

// Code to log all events start
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$dirList = $objectManager->get('\Magento\Framework\App\Filesystem\DirectoryList');
$logPathName = $dirList->getPath('var') . '/log/events.log';
$eventLogFile = fopen($logPathName, 'a');
fwrite($eventLogFile, $eventName . ' => ' . implode(', ', array_keys($data)) . "\n");
fclose($eventLogFile);
// Code to log all events ends

คุณสามารถตรวจสอบรายชื่อใน<magentoroot>/var/log/events.log


-1

คุณสามารถตรวจสอบลิงค์กิจกรรมด้านล่าง https://github.com/matinict/Magento-2-Events

ฉันต้องทนทุกข์ทรมานกับคนที่แตกต่างกันแบ่งปันเหตุการณ์ที่แตกต่างกัน แต่ไม่มีความแม่นยำสูญเสียเวลาของฉันในที่สุดมันเป็นเพียงแค่ไปที่ magento 2 ผู้ขายของคุณตรวจสอบ etc / event.xml หวังว่ามันจะช่วยนักพัฒนา magento 2 ได้

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