Daftar acara Magento 2

Jawaban:

18

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

mbalparda
sumber
Daftar ini sangat membantu tetapi tampaknya tidak lengkap. Acara sales_order_save_aftermisalnya yang cukup penting untuk tugas saya saat ini tidak ada dan ketika Anda mencari melalui repo Magento 2 Anda akan melihat bahwa tidak ada dispatchsama sekali untuk itu: github.com/magento/magento2/… Saya belum tahu bagaimana acara ini dikirim tetapi akan sangat bagus untuk memasukkannya dalam daftar!
Jey DWork
Bagaimana Anda tahu nama acara itu tidak ada? Mungkin Anda mencari yang setara di Magento 2 dengan nama lain?
mbalparda
Tidak yakin apakah kita membicarakan hal yang sama. Saya hanya ingin tahu mengapa acara 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_afteradalah acara Magento 2, sejauh yang saya tahu.
Jey DWork
14

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

  1. 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());
  2. 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
  3. Tata letak frontend membuat acara

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

huzefam
sumber
Barang bagus! Kita harus menggabungkan jawaban kita untuk memiliki segalanya di satu tempat. Bagaimana menurut anda?
mbalparda
baik jawaban Anda juga mandiri
huzefam
1

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 libfolder bukan appfolder).

Dalam debugger Anda hanya kirim ke "Evaluasi dan log" yang $eventNamevariabel 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.

Nama acara breakpoint 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\Actionkelas di bawah metode dispatch () .

drew7721
sumber
0

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

Priyank
sumber
-1

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

matinict
sumber