Как получить события / наблюдателей в magento 2
-
13-12-2019 - |
Вопрос
В 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);
.