มีรายการที่สมบูรณ์ของเหตุการณ์ใน Magento 2 หรือไม่? ฉันกำลังมองหาบางอย่างเช่นMagento Events Cheat Sheet (1.9)
มีรายการที่สมบูรณ์ของเหตุการณ์ใน Magento 2 หรือไม่? ฉันกำลังมองหาบางอย่างเช่นMagento Events Cheat Sheet (1.9)
คำตอบ:
ฉันรวบรวมรายการเหตุการณ์ 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/ ......ฉันยังไม่รู้ เหตุการณ์เหล่านี้ถูกส่งไปอย่างไร แต่ก็เป็นการดีที่จะรวมไว้ในรายการ
sales_order_save_after
(เช่นเดียวกับตัวอย่าง) ไม่ปรากฏขึ้นในรายการ (และการค้นหา) นอกจากนี้มันยังไม่เหมือนเหตุการณ์แบบไดนามิก จากนั้นฉันก็คิดว่าจะเป็นไปได้อย่างไรที่จะรวมเหตุการณ์ดังกล่าวเพื่อให้ได้รายการที่สมบูรณ์มากขึ้น และแน่นอนว่าฉันแค่พูดถึง Magento 2 sales_order_save_after
เป็นเหตุการณ์ Magento 2 เท่าที่ฉันจะบอกได้
เห็นได้ชัดว่าไม่ใช่แนวปฏิบัติที่ดี แต่ฉันให้ลิงค์เดียวซึ่งเป็นไปตามเหตุการณ์สำคัญใน Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Ofcourse รายการเหตุการณ์ไม่สมบูรณ์ราวกับว่าคุณได้ทำงานกับ Magento 1.x ตรรกะการจัดส่งเหตุการณ์จะถูกเก็บไว้
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());
การจัดส่งตัวควบคุม
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
เค้าโครงแสดงเหตุการณ์ส่วนหน้า
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
คอลเลกชันของโมเดล
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
คำตอบข้างต้นทั้งหมดใช้งานได้ดี แต่บางครั้งคุณจำเป็นต้องรู้ว่าเหตุการณ์ใดที่เกิดขึ้นกับการโหลดหน้าเว็บที่เฉพาะเจาะจงและลำดับที่ถูกโยนทิ้ง
ดังนั้นที่นี่มีวิธีที่ดีที่สุด (ในความคิดของฉันรู้นี้) ใช้ xDebug และตั้งจุดพักที่บรรทัด 56ในชั้นเรียนMagento\Framework\Event\Manager
(อยู่ในlib
โฟลเดอร์ไม่ใช่app
โฟลเดอร์)
ในการดีบักของคุณเพียงแค่บอกให้"ประเมินและเข้าสู่ระบบ"$eventName
ตัวแปรและดูเหตุการณ์ทั้งหมดที่แสดงในคอนโซลในขณะที่คุณโหลดหน้าเว็บ
ฉันขอแนะนำให้ปิดการใช้งานตัวเลือก "Suspend" เนื่องจากอาจมีเหตุการณ์นับร้อยที่ถูกโยนออกไปคุณอาจต้องทิ้งไว้เพื่อให้เบรกพอยต์แรกถูกโจมตีจากนั้นคุณสามารถลบออกได้
ทำไมฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการรับกิจกรรมทั้งหมดที่ส่งมาจากการโหลดหน้าเว็บเพราะมันจะแสดงให้คุณเห็นเหตุการณ์ทั้งหมดที่ถูกจัดส่งโดยผู้ควบคุม ตัวควบคุมแต่ละตัวส่งเหตุการณ์ก่อนและหลังด้วยชื่อที่ประกอบด้วยที่มี FullActionName, RouteName และค่าเริ่มต้น postdispatch หนึ่ง ดูFramework\App\Action
ระดับภายใต้การจัดส่ง ()วิธีการ
มันยากที่จะได้รับเหตุการณ์ที่จะรู้ว่าในหน้าเฉพาะเจาะจง ดังนั้นคุณสามารถลองใช้รหัสนี้เพื่อติดตามกิจกรรมที่ได้รับเรียกและใช้สิ่งที่ดีที่สุดสำหรับความต้องการของคุณ
/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
คุณสามารถตรวจสอบลิงค์กิจกรรมด้านล่าง https://github.com/matinict/Magento-2-Events
ฉันต้องทนทุกข์ทรมานกับคนที่แตกต่างกันแบ่งปันเหตุการณ์ที่แตกต่างกัน แต่ไม่มีความแม่นยำสูญเสียเวลาของฉันในที่สุดมันเป็นเพียงแค่ไปที่ magento 2 ผู้ขายของคุณตรวจสอบ etc / event.xml หวังว่ามันจะช่วยนักพัฒนา magento 2 ได้