Magento 2 etkinlik listesi


Yanıtlar:


18

Magento 2 olaylarının bir listesini bir araya getirdim.

find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;

Liste, biri statik olaylar için diğeri dinamikler için olmak üzere 2 bölüme ayrılmıştır.

Gönderen burada , statik olaylar tam olay adı gibi tanımlanmış tüm bu olaylar şunlardır:

$this->_eventManager->dispatch('some_event');

Dinamik etkinlikler, dinamik olarak, çalışma zamanında, getirilen etkinlik adı ile tanımlanan tüm etkinliklerdir:

$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);

Daha iyi bir okuma için liste e-tablodadır. Etkinlik bağlamını daha iyi anlamak için maçtan sonra 2 satır bıraktım.

Aynı liste resmi Magento 2 repo için arama bulunabilir_eventManager->dispatch


Liste çok yararlı ama eksik görünüyor. sales_order_save_afterÖrneğin, şu anki görevim için oldukça önemli olan olay eksik ve Magento 2 deposunu aradığınızdadispatch bunun için hiç bir şey olmadığını fark edeceksiniz : github.com/magento/magento2/… Henüz bir fikrim yok bu olayların nasıl gönderildiği ancak bunları listeye eklemek harika olurdu!
Jey DWork

Etkinlik adının mevcut olmadığını nasıl anlarsınız? Belki de başka bir isimle Magento 2'de bir eşdeğer mi arıyorsunuz?
mbalparda

Aynı şeyden bahsettiğimizden emin değilim. Sadece olayın neden sales_order_save_after(bir örnek olarak) listede görünmediğini ve aynı zamanda dinamik bir olay gibi görünmediğini merak ediyordum . Ve sonra daha eksiksiz bir liste elde etmek için bu tür olayları dahil etmenin mümkün olup olmadığını ve nasıl mümkün olabileceğini düşünüyordum. Ve açıkçası sadece Magento 2'den bahsettiğim sales_order_save_afterkadarıyla bir Magento 2 etkinliği hakkında konuşuyorum .
Jey DWork

14

Açıkçası, iyi bir uygulama değil, ama Magento2'deki önemli olaylara uygun bir bağlantı sağlıyorum

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

Tabii ki olaylar listesi eksik, sanki Magento 1.x ile çalışmış gibi, olay gönderme mantığı korunur

  1. lib/internal/Magento/Framework/Model/AbstractModel.php Bir modelin olaylarından önce ve sonra yükleme

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);

    Model nesnesinin olaylarından önce ve sonra kaydetme

    $this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());

    Bir nesneyi silme

    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());

    Bir nesneyi temizleme

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. Denetleyici gönderimi

    lib / iç / Magento / Çerçeve / Uygulama / Aksiyon / 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. Ön uç düzeni oluşturma etkinlikleri

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. Model Koleksiyonları

    lib / iç / Magento / Çerçeve / Model / ResourceModel / Db / Koleksiyon / AbstractCollection.php

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
    
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);

Bu tür birçok olay vardır ve Magento2'de açıkça ve örtük olarak oluşturulan olayların bir kombinasyonudur.


İyi şeyler! Her şeyi tek bir yerde tutmak için cevaplarımızı birleştirmeliyiz. Ne düşünüyorsun?
mbalparda

Peki cevabınız da kendi kendine yeterli
huzefam

1

Her şeyden önce cevaplar harika çalışıyor, ancak bazen belirli bir sayfa yükünde hangi etkinliklerin atıldığını ve atıldıkları sırayı bilmeniz gerekir.

Burada en iyi yol var (bence bunu bilmek için), xDebug kullanın ve sınıftaki 56 satırında bir kırılma noktası ayarlayın Magento\Framework\Event\Manager( libklasörde değil appklasörde).

Senin ayıklayıcısında sadece bunu söylemek "değerlendirin ve log"$eventName değişkeni ve sayfayı yüklemek gibi tüm olayların konsolunda gösterilmesini izle.

Ayrıca "Askıya Al" seçeneğini devre dışı bırakmanızı da öneririm çünkü atılan yüz olay olabilir, ilk kesme noktasının vurulması için açık bırakmanız gerekebilir ve ardından kaldırabilirsiniz.

Etkinlik adları kesme noktası Neden bu bir sayfa yükü gönderilen tüm olayları almak için en iyi yol olduğunu düşünüyorum çünkü bu da denetleyiciler tarafından gönderilen tüm olayları gösterecektir çünkü. Her denetleyici, olayları FullActionName, RouteName ve varsayılan gönderim sonrası olayları içeren oluşturulmuş adlarla önce ve sonra gönderir. Dispatch () yönteminin Framework\App\Actionaltındaki sınıfa bakın .


0

Onun zor bir olay belirli bir sayfaya içinde tanımak için. Böylece , çağrılan olayları izlemek ve ihtiyaçlarınız için en iyisini kullanmak için bu kodu deneyebilirsiniz .

/vendor/magento/framework/Event/Manager.php

bu kodu etkinlik adının altına ekle

$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

Listeyi şuradan kontrol edebilirsiniz :<magentoroot>/var/log/events.log


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.