magento 2에서 이벤트 / 관찰자를 얻는 방법


16

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에서 이벤트 / 관찰자 목록을 얻을 수 있습니까?

답변:


14

메소드의 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


당신은 흔들고있다 .....
Bojjaiah

@Marius는 보호 된 $ logger 대신 키워드 $ protected의 오타 일뿐입니다.
Haijerome

4

이것은 "빠른 디버깅"을위한 것이므로 여러 번의 편집을 피할 수 있습니다.

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 답변이 올바른 솔루션입니다.


사용 \Psr\Log\LoggerInterface::class하십시오. 항상.
nevvermind

@nevvermind .. 내가 전에 시도 ... Fatal error: Non-static method Psr\Log\LoggerInterface::info() cannot be called statically. 더 쉬운 방법을 찾으면 알려주십시오.
레논 스튜어트

리터럴 문자열 FQCN 대신 :: class 키워드 에 대해 이야기하고 있습니다.
nevvermind

3

내 경우에는 magento1의 mage.php 파일에서와 같이 매우 짧은 아래 변경 사항을 수행하여 모든 이벤트 목록을 얻을 수 있습니다.

참고 : 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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.