Danh sách sự kiện Magento 2


Câu trả lời:


18

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


Danh sách này rất hữu ích nhưng có vẻ không đầy đủ. sales_order_save_afterVí 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ì dispatchcho 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!
Jey DWork

Làm thế nào để bạn biết tên sự kiện của nó không tồn tại? Có lẽ bạn đang tìm kiếm một tương đương trong Magento 2 với một tên khác?
mbalparda

Không chắc chắn nếu chúng ta đang nói về điều tương tự. Tôi chỉ tự hỏi tại sao sự kiện 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_afterlà một sự kiện Magento 2, theo như tôi có thể nói.
Jey DWork

14

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

  1. 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());
  2. 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
    
  3. Bố trí giao diện kết xuất

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
    
  4. 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


Đồ tốt! Chúng ta nên hợp nhất câu trả lời của mình để có mọi thứ ở một nơi. Bạn nghĩ sao?
mbalparda

cũng câu trả lời của bạn là tự túc
huzefam

1

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 libthư mục không phải là appthư 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 $eventNamebiế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ó.

Điểm dừng tên sự kiệ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\Actionlớp theo phương thức Clark () .


0

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


-1

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.