Có danh sách đầy đủ các sự kiện trong Magento 2 không? Tôi đang tìm kiếm thứ gì đó như Magento Events Cheat Sheet (1.9)
Có danh sách đầy đủ các sự kiện trong Magento 2 không? Tôi đang tìm kiếm thứ gì đó như Magento Events Cheat Sheet (1.9)
Câu trả lời:
Tôi tập hợp một danh sách các sự kiện Magento 2 bằng cách sử dụng
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
Danh sách được chia thành 2 phần, một phần cho các sự kiện tĩnh và một phần cho động lực học.
Từ đây , các sự kiện tĩnh là tất cả những sự kiện được xác định với tên sự kiện đầy đủ như:
$this->_eventManager->dispatch('some_event');
Các sự kiện động là tất cả những sự kiện được xác định động, trong thời gian chạy, tên sự kiện được tìm nạp như:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
Danh sách này nằm trong bảng tính để đọc tốt hơn. Tôi đã để lại 2 dòng sau trận đấu để hiểu rõ hơn về bối cảnh sự kiện.
Danh sách tương tự có thể được tìm thấy trong repo Magento 2 chính thức cho_eventManager->dispatch
sales_order_save_after
Ví dụ, sự kiện khá quan trọng đối với nhiệm vụ hiện tại của tôi bị thiếu và khi bạn tìm kiếm qua repo Magento 2, bạn sẽ nhận thấy rằng không có gì dispatch
cho nó cả: github.com/magento/magento2/. Tôi chưa có ý tưởng nào làm thế nào những sự kiện này được gửi đi nhưng sẽ rất tuyệt nếu đưa chúng vào danh sách!
sales_order_save_after
(chỉ là một ví dụ) không xuất hiện trong danh sách (và tìm kiếm) cũng không giống như một sự kiện năng động. Và sau đó tôi đã suy nghĩ nếu và làm thế nào có thể bao gồm các sự kiện như vậy để có được một danh sách đầy đủ hơn. Và rõ ràng tôi chỉ nói về Magento 2 sales_order_save_after
là một sự kiện Magento 2, theo như tôi có thể nói.
Rõ ràng, không phải là một thực tiễn tốt, nhưng tôi đang cung cấp một liên kết đã tuân thủ các sự kiện quan trọng trong Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Tất nhiên, danh sách các sự kiện không đầy đủ, như thể bạn đã làm việc với Magento 1.x, logic gửi sự kiện được giữ lại
lib/internal/Magento/Framework/Model/AbstractModel.php
Tải trước và sau các sự kiện của mô hình
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Lưu trước và sau các sự kiện của một đối tượng mô hình
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Xóa một đối tượng
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Xóa một đối tượng
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Kiểm soát công văn
lib / nội bộ / Magento / Framework / Ứng dụng / Hành động / 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
Bố trí giao diện kết xuất
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Bộ sưu tập các mô hình
lib / Internal / Magento / Framework / Model / ResourceModel / Db / Collection / AbstractCollection.php
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);
Có rất nhiều sự kiện như vậy và nó là sự kết hợp của các sự kiện được tạo rõ ràng và ngầm định trong Magento2
Các câu trả lời trên đều có tác dụng tuyệt vời, nhưng đôi khi bạn cần biết những sự kiện nào được đưa vào một tải trang cụ thể và thứ tự chúng được ném vào.
Vì vậy, đây là cách tốt nhất (theo ý kiến của tôi để biết điều này), sử dụng xDebug và đặt điểm dừng trên dòng 56 trong lớp Magento\Framework\Event\Manager
(nó nằm trong lib
thư mục không phải là app
thư mục).
Trong chương trình gỡ rối của bạn chỉ nói với nó để "Đánh giá và đăng nhập" các $eventName
biến và xem tất cả những sự kiện hiển thị trong giao diện điều khiển như bạn nạp trang.
Tôi cũng khuyên bạn nên vô hiệu hóa tùy chọn "Tạm dừng" vì có thể có hàng trăm sự kiện được ném, bạn có thể cần phải để lại điểm dừng đầu tiên để đánh và sau đó bạn có thể xóa nó.
Tại sao tôi nghĩ rằng đây là cách tốt nhất để có được tất cả các sự kiện được gửi khi tải trang là bởi vì điều này cũng sẽ hiển thị cho bạn tất cả các sự kiện được gửi bởi bộ điều khiển. Mỗi bộ điều khiển gửi các sự kiện vào trước và sau với các tên được tạo có chứa FullActionName, RouteName và postdispatch mặc định. Xem Framework\App\Action
lớp theo phương thức Clark () .
Nó khó khăn để có được sự kiện để biết trong một trang cụ thể. Vì vậy, bạn có thể thử mã này để theo dõi các sự kiện được gọi và sử dụng sự kiện tốt nhất cho nhu cầu của bạn
/vendor/magento/framework/Event/Manager.php
thêm mã này bên dưới tên sự kiện
$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
Bạn có thể kiểm tra danh sách trong<magentoroot>/var/log/events.log
Bạn có thể kiểm tra liên kết bên dưới của các sự kiện https://github.com/matinict/Magento-2-Events
Tôi đau khổ vì những người khác nhau chia sẻ sự kiện khác nhau nhưng cuối cùng không có sự chính xác nào làm mất thời gian của tôi, đó chỉ là những mánh khóe để kiểm tra nhà cung cấp magento 2 của bạn, v.v.