Как получить события/наблюдателей в 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, где я могу получить список событий/наблюдателей?
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
Поскольку это предназначено для "быстрой отладки", вы могли бы избежать многократных изменений, выполнив это.
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
@ Ответ Мариуса - это правильное решение.
В моем случае я могу получить список всех событий, выполнив следующие изменения, которые очень коротки, как мы делаем в 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);