Как получить события/наблюдателей в magento 2


В 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, где я могу получить список событий/наблюдателей?

Author: Marius, 2015-10-15

3 answers

Вы можете сделать то же самое, что и в Magento 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

 14
Author: Marius, 2016-06-22 16:12:07

Поскольку это предназначено для "быстрой отладки", вы могли бы избежать многократных изменений, выполнив это.

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

@ Ответ Мариуса - это правильное решение.

 5
Author: Renon Stewart, 2017-08-28 10:21:11

В моем случае я могу получить список всех событий, выполнив следующие изменения, которые очень коротки, как мы делаем в mage.php файл magento1:

Примечание: Я тестировал только версию magento2.1.1, поэтому я не уверен в какой-либо другой версии

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

public function dispatch

Напишите ниже код, чтобы получить все события в отладке.файл журнала после

$eventName = mb_strtolower($eventName); 

Рядом с линией 56

\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->debug($eventName);
 3
Author: jyotiranjan.in, 2016-12-02 14:11:31