Wie bekomme ich Ereignisse / Beobachter in Magento 2?


16

In Magento 1 kann ich eine Liste von Ereignissen / Beobachtern durch Debugging- dispatchEvent()Methode von Mage.phpunten erhalten.

/**
     * 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;
    }

In Magento 2, wo ich Liste der Ereignisse / Beobachter bekommen kann?

Antworten:


14

Sie können das Gleiche tun, was Sie in Magento 1.x in der Methode getan haben \Magento\Framework\Event\Manager::dispatch().

aber es ist ein Unterschied. Sie haben keinen Zugriff auf den Logger.
Sie müssen eine Instanz des Loggers in den Konstruktor einfügen.

protected $logger;

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

Dann können Sie in der dispatchMethode folgendes aufrufen :

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

Stattdessen infokönnen Sie alle Methoden von verwenden\Psr\Log\LoggerInterface


Sie
rocken

@Marius nur ein Tippfehler mit dem Schlüsselwort $ protected anstelle von protected $ logger.
Haijerome

4

Da dies für "schnelles Debuggen" ist, können Sie durch Ausführen mehrere Bearbeitungen vermeiden.

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

Ort

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

@ Marius Antwort ist die richtige Lösung.


Verwenden Sie \Psr\Log\LoggerInterface::classbitte. Immer.
nevvermind

@nevvermind .. Ich habe versucht , dass vor ... Fatal error: Non-static method Psr\Log\LoggerInterface::info() cannot be called statically. Bitte lassen Sie mich wissen, wenn Sie einen einfacheren Weg finden.
Renon Stewart

Ich spreche über die :: Klasse Schlüsselwort anstelle der Zeichenkette FQCN.
nevvermind

3

In meinem Fall kann ich eine Liste aller Ereignisse erhalten, indem ich die folgenden Änderungen vornehme, die sehr kurz sind, wie wir es in der mage.php-Datei von magento1 tun:

Hinweis: Ich habe nur die Version magento2.1.1 getestet, daher bin ich mir für keine andere Version sicher

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

public function dispatch

Schreiben Sie den folgenden Code, um alle Ereignisse in der debug.log-Datei nachher abzurufen

$eventName = mb_strtolower($eventName); 

in der Nähe der Linie 56

\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->debug($eventName);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.