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行残しました。
sales_order_save_after
たとえば、現在のタスクに非常に重要なイベントがありません。Magento2リポジトリを検索すると、まったくないことがわかりdispatch
ます:github.com/magento/magento2 / ...まだわかりませんこれらのイベントがどのようにディスパッチされるかですが、リストにそれらを含めることは素晴らしいことです!
sales_order_save_after
(ちょうど一例として)がリスト(および検索)に表示されず、また動的なイベントのようにも見えない理由を疑問に思っていました。そして、そのようなイベントを含めて、より完全なリストを取得できるかどうか、またどのように考えられるかを考えていました。そして明らかにsales_order_save_after
、Magento 2 については、Magento 2のイベントであるということだけを話しているのです。
明らかに、良い習慣ではありませんが、Magento2の重要なイベントを遵守するリンクを提供しています。
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
もちろん、イベントリストは不完全です。Magento1.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 / 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
フロントエンドレイアウトレンダリングイベント
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
モデルのコレクション
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で明示的および暗黙的に生成されたイベントの組み合わせです
上記の答えはすべてうまくいきますが、特定のページの読み込みでスローされるイベントと、スローされる順序を知る必要がある場合があります。
したがって、ここに最善の方法があります(これを知るための私の意見では)、xDebugを使用し、クラスの行56にブレークポイントを設定Magento\Framework\Event\Manager
しlib
ます(フォルダーではなくapp
フォルダーにあります)。
デバッガーで変数を「評価してログに記録」し$eventName
、ページをロードするときにコンソールにすべてのイベントが表示されるのを見るだけです。
また、 "Suspend"オプションを無効にすることをお勧めします。何百ものイベントがスローされる可能性があり、最初のブレークポイントがヒットするまでオンにしておく必要がある場合があります。
これがページのロード時にディスパッチされたすべてのイベントを取得する最良の方法だと思う理由は、これによりコントローラーによってディスパッチされたすべてのイベントも表示されるためです。各コントローラーは、FullActionName、RouteName、およびデフォルトのpostdispatchを含む構成名でイベントの前後にディスパッチします。をご覧くださいFramework\App\Action
dispatch()メソッドの下クラスを。
その難しい特定のページに知るためのイベントを取得します。したがって、このコードを試して、呼び出されるイベントを追跡し、ニーズに最適なものを使用できます
/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
異なる人々が異なるイベントを共有することに苦しんでいますが、正確さはついに私の時間を失いませんでした