Magento 2 में घटनाओं / पर्यवेक्षकों को कैसे प्राप्त करें


16

Magento 1 में मैं नीचे की तरह डिबगिंग dispatchEvent()विधि द्वारा घटनाओं / पर्यवेक्षकों की सूची प्राप्त कर सकता हूं Mage.php

/**
     * Dispatch event
     *
     * Calls all observer callbacks registered for this event
     * and multiple observers matching event name pattern
     *
     * @param string $name
     * @param array $data
     * @return Mage_Core_Model_App
     */
    public static function dispatchEvent($name, array $data = array())
    {
        Mage::log($name,null,'Events');
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }

Magento 2 में जहां मैं घटनाओं / पर्यवेक्षकों की सूची प्राप्त कर सकता हूं?

जवाबों:


14

आप वही काम कर सकते हैं जो आपने मैगेंटो 1.x विधि में किया था \Magento\Framework\Event\Manager::dispatch()

लेकिन यह एक अंतर है। आपके पास लकड़हारा नहीं है।
आपको कंस्ट्रक्टर में लकड़हारा का एक उदाहरण इंजेक्ट करना होगा।

protected $logger;

public function __construct(
    InvokerInterface $invoker, 
    ConfigInterface $eventConfig,
    \Psr\Log\LoggerInterface $logger
)
{
    $this->_invoker = $invoker;
    $this->_eventConfig = $eventConfig;
    $this->logger = $logger;
}

तो आप dispatchइस विधि में कॉल कर सकते हैं :

$this->logger->info($message);

इसके बजाय infoआप सभी तरीकों का उपयोग कर सकते हैं\Psr\Log\LoggerInterface


आप रॉक कर रहे हैं ........
बोजैया 5

@ माउस केवल $ $ लकड़हारा के बजाय संरक्षित कीवर्ड के साथ एक टाइपो है।
हैजेरोम

4

चूंकि यह "त्वरित डिबगिंग" के लिए है, इसलिए आप कई संपादन करने से बच सकते हैं।

public function dispatch($eventName, array $data = [])
{
    $logger = \Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
    $logger->info($eventName);
    ...

स्थान

/lib/internal/Magento/Framework/Event/Manager.php

@ दारा जवाब सही समाधान है।


\Psr\Log\LoggerInterface::classकृपया उपयोग करें। हमेशा।
नेवरमाइंड

@nevvermind .. मुझे लगता है कि कोशिश की पहले ... Fatal error: Non-static method Psr\Log\LoggerInterface::info() cannot be called statically। कृपया मुझे बताएं कि क्या आप एक आसान तरीका समझ सकते हैं।
रेनॉन स्टीवर्ट

मैं शाब्दिक स्ट्रिंग FQCN के बजाय :: क्लास कीवर्ड के बारे में बात कर रहा हूं ।
नेवरमाइंड

3

मेरे मामले में मैं नीचे किए गए परिवर्तनों से सभी घटनाओं की सूची प्राप्त कर सकता हूं जो कि बहुत ही कम हैं जैसे कि हम Magento1 की mage.php फ़ाइल में करते हैं:

नोट: मैंने केवल magento2.1.1 संस्करण पर परीक्षण किया है, इसलिए मुझे किसी अन्य संस्करण के लिए यकीन नहीं है

\vendor\magento\framework\Event\Manager.php

public function dispatch

सभी ईवेंट के बाद debug.log फ़ाइल में प्राप्त करने के लिए नीचे दिए गए कोड को लिखें

$eventName = mb_strtolower($eventName); 

56 रेखा के पास

\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->debug($eventName);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.