Magento 2イベントリスト


回答:


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公式リポジトリで検索できます。_eventManager->dispatch


リストは非常に役立ちますが、不完全なようです。sales_order_save_afterたとえば、現在のタスクに非常に重要なイベントがありません。Magento2リポジトリを検索すると、まったくないことがわかりdispatchます:github.com/magento/magento2 / ...まだわかりませんこれらのイベントがどのようにディスパッチされるかですが、リストにそれらを含めることは素晴らしいことです!
ジェイDWork 16

そのイベント名が存在しないことをどのようにして知るのですか?たぶん、あなたは別の名前でMagento 2で同等のものを探していますか?
mbalparda

同じことを話しているのかどうかはわかりません。イベントsales_order_save_after(ちょうど一例として)がリスト(および検索)に表示されず、また動的なイベントのようにも見えない理由を疑問に思っていました。そして、そのようなイベントを含めて、より完全なリストを取得できるかどうか、またどのように考えられるかを考えていました。そして明らかにsales_order_save_after、Magento 2 については、Magento 2のイベントであるということだけを話しているのです。
ジェイDWork 16

14

明らかに、良い習慣ではありませんが、Magento2の重要なイベントを遵守するリンクを提供しています。

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

もちろん、イベントリストは不完全です。Magento1.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 / internal / Magento / Framework / App / 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 / 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]);

このようなイベントは数多くあり、Magento2で明示的および暗黙的に生成されたイベントの組み合わせです


良いもの!答えをマージして、すべてを1か所にまとめる必要があります。どう思いますか?
mbalparda

あなたの答えも自給自足です
-huzefam

1

上記の答えはすべてうまくいきますが、特定のページの読み込みでスローされるイベントと、スローされる順序を知る必要がある場合があります。

したがって、ここに最善の方法があります(これを知るための私の意見では)、xDebugを使用し、クラスの行56にブレークポイントを設定Magento\Framework\Event\Managerlibます(フォルダーではなくappフォルダーにあります)。

デバッガーで変数を「評価してログに記録」$eventName、ページをロードするときにコンソールにすべてのイベントが表示されるのを見るだけです。

また、 "Suspend"オプションを無効にすることをお勧めします。何百ものイベントがスローされる可能性があり、最初のブレークポイントがヒットするまでオンにしておく必要がある場合があります。

イベント名ブレークポイント これがページのロード時にディスパッチされたすべてのイベントを取得する最良の方法だと思う理由は、これによりコントローラーによってディスパッチされたすべてのイベントも表示されるためです。各コントローラーは、FullActionName、RouteName、およびデフォルトのpostdispatchを含む構成名でイベントの前後にディスパッチします。をご覧くださいFramework\App\Actiondispatch()メソッドの下クラスを。


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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.