Вопрос

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

Это было полезно?

Решение

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

Другие советы

Поскольку это для «быстрой отладки», вы можете избежать нескольких редактиций.

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

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

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

Примечание. Я проверен только на версии 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);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top