Magento 2'de etkinliklerin tam listesi var mı? Magento Events Cheat Sheet (1.9) gibi bir şey arıyorum
Magento 2'de etkinliklerin tam listesi var mı? Magento Events Cheat Sheet (1.9) gibi bir şey arıyorum
Yanıtlar:
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
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!
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_after
kadarıyla bir Magento 2 etkinliği hakkında konuşuyorum .
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
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());
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
Ön uç düzeni oluşturma etkinlikleri
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
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.
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
( lib
klasörde değil app
klasö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.
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\Action
altındaki sınıfa bakın .
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
Aşağıdaki etkinliklerin bağlantısını https://github.com/matinict/Magento-2-Events adresinden kontrol edebilirsiniz.
ben farklı insanlar farklı olay paylaşmak ama hiçbir doğruluk sonunda benim zaman kaybetti acı sadece hileler senin magento 2 satıcı kontrol vb gidin / event.xml, Umarım magento 2 geliştirici için yardımcı olabilir