Apakah ada daftar lengkap acara di Magento 2? Saya mencari sesuatu seperti Magento Events Cheat Sheet (1.9)
Apakah ada daftar lengkap acara di Magento 2? Saya mencari sesuatu seperti Magento Events Cheat Sheet (1.9)
Jawaban:
Saya mengumpulkan daftar acara Magento 2 menggunakan
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
Daftar ini dibagi dalam 2 bagian, satu untuk acara statis dan satu untuk dinamika.
Dari sini , peristiwa statis adalah semua peristiwa yang didefinisikan dengan nama acara lengkap seperti:
$this->_eventManager->dispatch('some_event');
Peristiwa dinamis adalah semua peristiwa yang didefinisikan secara dinamis, pada saat runtime, mengambil nama acara seperti:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
Daftar ini ada dalam spreadsheet untuk bacaan yang lebih baik. Saya meninggalkan 2 baris setelah pertandingan untuk pemahaman yang lebih baik tentang konteks acara.
Daftar yang sama dapat ditemukan mencari di resmi Magento 2 repo untuk_eventManager->dispatch
sales_order_save_after
misalnya yang cukup penting untuk tugas saya saat ini tidak ada dan ketika Anda mencari melalui repo Magento 2 Anda akan melihat bahwa tidak ada dispatch
sama sekali untuk itu: github.com/magento/magento2/… Saya belum tahu bagaimana acara ini dikirim tetapi akan sangat bagus untuk memasukkannya dalam daftar!
sales_order_save_after
(seperti salah satu contoh) tidak muncul dalam daftar (dan pencarian) juga tidak terlihat seperti acara yang dinamis. Dan kemudian saya berpikir jika dan bagaimana mungkin untuk memasukkan acara seperti itu untuk mendapatkan daftar yang lebih lengkap. Dan jelas saya hanya berbicara tentang Magento 2 sales_order_save_after
adalah acara Magento 2, sejauh yang saya tahu.
Jelas, bukan praktik yang baik, tetapi saya menyediakan satu tautan yang telah memenuhi acara penting di Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Ofcourse daftar acara tidak lengkap, seolah-olah Anda telah bekerja dengan Magento 1.x, logika pengiriman peristiwa tetap dipertahankan
lib/internal/Magento/Framework/Model/AbstractModel.php
Muat sebelum dan sesudah peristiwa model
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Simpan sebelum dan sesudah peristiwa objek model
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Menghapus objek
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Membersihkan objek
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Pengiriman pengontrol
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
Tata letak frontend membuat acara
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Koleksi Model
lib / internal / Magento / Kerangka / 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]);
Ada banyak peristiwa seperti itu, dan itu adalah kombinasi dari peristiwa yang dihasilkan secara eksplisit dan implisit di Magento2
Jawaban di atas semuanya bekerja dengan baik, tetapi kadang-kadang Anda perlu tahu acara apa yang dilemparkan pada pemuatan halaman tertentu dan urutannya.
Jadi di sini ada cara terbaik (menurut saya untuk mengetahui hal ini), gunakan xDebug dan atur break point on line 56 di kelas Magento\Framework\Event\Manager
(ada di lib
folder bukan app
folder).
Dalam debugger Anda hanya kirim ke "Evaluasi dan log" yang $eventName
variabel dan menonton semua peristiwa ditampilkan dalam konsol seperti yang Anda memuat halaman.
Saya juga akan merekomendasikan menonaktifkan opsi "Tangguhkan" karena mungkin ada ratusan peristiwa yang dilemparkan, Anda mungkin perlu membiarkannya untuk breakpoint pertama yang terkena dan kemudian Anda dapat menghapusnya.
Mengapa saya pikir ini adalah cara terbaik untuk membuat semua acara dikirim pada halaman memuat adalah karena ini juga akan menunjukkan kepada Anda semua acara yang dikirim oleh pengontrol. Setiap pengontrol mengirimkan peristiwa sebelum dan sesudah dengan nama-nama yang terdiri yang mengandung FullActionName, RouteName dan satu postdispatch default. Lihat Framework\App\Action
kelas di bawah metode dispatch () .
Its sulit untuk mendapatkan event untuk mengetahui di halaman tertentu. Jadi, Anda dapat mencoba kode ini untuk melacak acara yang dipanggil dan menggunakan yang terbaik untuk kebutuhan Anda
/vendor/magento/framework/Event/Manager.php
tambahkan kode ini di bawah nama acara
$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
Anda dapat memeriksa daftar di<magentoroot>/var/log/events.log
Anda dapat memeriksa tautan acara di bawah ini https://github.com/matinict/Magento-2-Events
Saya menderita bahwa orang yang berbeda berbagi acara yang berbeda tetapi tidak ada keakuratan yang kehilangan waktu saya pada akhirnya hanya triknya pergi ke cek magento 2 Anda vendor / event.xml, Semoga dapat membantu pengembang Magento 2