क्या Magento 2 में घटनाओं की कोई पूरी सूची है? मैं Magento घटनाक्रम धोखा शीट (1.9) की तरह कुछ के लिए देख रहा हूँ
क्या Magento 2 में घटनाओं की कोई पूरी सूची है? मैं Magento घटनाक्रम धोखा शीट (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 लाइनें छोड़ दीं।
एक ही सूची में खोज पाया जा सकता है सरकारी Magento 2 रेपो के लिए_eventManager->dispatch
sales_order_save_after
उदाहरण के लिए घटना , जो मेरे वर्तमान कार्य के लिए बहुत महत्वपूर्ण है, गायब है और जब आप Magento 2 रेपो के माध्यम से खोजते हैं, तो आप देखेंगे कि इसके लिए बिल्कुल भी नहीं dispatch
है: github.com/magento/magento2// मुझे अभी तक कोई पता नहीं है इन घटनाओं को कैसे भेजा जाता है, लेकिन इन्हें सूची में शामिल करना बहुत अच्छा होगा!
sales_order_save_after
(सिर्फ एक उदाहरण के रूप में) सूची में नहीं आती है (और खोज) यह भी एक गतिशील घटना की तरह नहीं दिखता है। और फिर मैं सोच रहा था कि क्या और कैसे इस तरह की घटनाओं को और अधिक पूर्ण सूची में शामिल करना संभव हो सकता है। और जाहिर है कि मैं केवल Magento 2 के बारे में बात कर रहा हूँ sales_order_save_after
एक Magento 2 घटना है, जहाँ तक मैं बता सकता हूँ।
जाहिर है, एक अच्छा अभ्यास नहीं है, लेकिन मैं एक लिंक प्रदान कर रहा हूं जिसने Magento2 में महत्वपूर्ण घटनाओं का अनुपालन किया है
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
बेशक घटनाओं की सूची अधूरी है, जैसे कि यदि आपने Magento 1.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 / आंतरिक / Magento / फ्रेमवर्क / अनुप्रयोग / क्रिया / 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 / आंतरिक / Magento / फ्रेमवर्क / मॉडल / ResourceModel / DB / संग्रह / 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
चर और घड़ी के सभी घटनाओं कंसोल पर दिखाना के रूप में आप पृष्ठ लोड।
मैं "सस्पेंड" विकल्प को अक्षम करने की भी सिफारिश करूंगा क्योंकि फेंकी गई घटनाओं में से सौ हो सकती हैं, आपको पहले ब्रेकप्वाइंट पर हिट होने के लिए इसे छोड़ने की आवश्यकता हो सकती है और फिर आप इसे हटा सकते हैं।
मुझे लगता है कि पृष्ठ लोड पर भेजे गए सभी ईवेंट को प्राप्त करने का यह सबसे अच्छा तरीका है क्योंकि यह आपको उन सभी घटनाओं को भी दिखाएगा जो नियंत्रकों द्वारा भेजी जाती हैं। प्रत्येक नियंत्रक पहले और बाद में FullActionName, RouteName और डिफ़ॉल्ट पोस्टडिस्पैक्ट वाले नामों के साथ घटनाओं को भेजता है। प्रेषण () पद्धति के Framework\App\Action
तहत कक्षा देखें ।
इसकी मुश्किल घटना एक विशेष पृष्ठ में पता करने के लिए मिलता है। इसलिए आप इस कोड को कॉल करने की घटनाओं को ट्रैक करने की कोशिश कर सकते हैं और अपनी आवश्यकताओं के लिए सबसे अच्छा उपयोग कर सकते हैं
/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
मुझे लगता है कि अलग-अलग लोग अलग-अलग घटनाओं को साझा करते हैं, लेकिन कोई भी सटीकता मेरे समय को नहीं खोती है, बस इसकी चालें आपके Magento के 2 वेंडर की जांच आदि / event.xml पर जाती हैं, आशा है कि यह magento 2 डेवलपर को मदद कर सकती है