Magento 2'de olaylar / gözlemciler nasıl edinilir


16

Magento 1'de aşağıdaki gibi hata ayıklama dispatchEvent()yöntemiyle olayların / gözlemcilerin listesini alabilirim 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'de olayların / gözlemcilerin listesini nereden alabilirim?

Yanıtlar:


14

Yöntemde Magento 1.x ile aynı şeyi yapabilirsiniz \Magento\Framework\Event\Manager::dispatch().

ama bu bir fark. Kaydediciye erişiminiz yok.
Yapıcıya günlükçünün bir örneğini enjekte etmeniz gerekir.

protected $logger;

public function __construct(
    InvokerInterface $invoker, 
    ConfigInterface $eventConfig,
    \Psr\Log\LoggerInterface $logger
)
{
    $this->_invoker = $invoker;
    $this->_eventConfig = $eventConfig;
    $this->logger = $logger;
}

Daha sonra dispatchyöntemde bunu çağırabilirsiniz :

$this->logger->info($message);

Bunun yerine infotüm yöntemleri kullanabilirsiniz.\Psr\Log\LoggerInterface



@Marius, korumalı $ logger yerine $ korumalı anahtar kelimesi olan bir yazım hatasıdır.
Haijerome

4

Bu, "hızlı hata ayıklama" için olduğundan, yaparak birden fazla düzenlemeyi önleyebilirsiniz.

public function dispatch($eventName, array $data = [])
{
    $logger = \Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
    $logger->info($eventName);
    ...

yer

/lib/internal/Magento/Framework/Event/Manager.php

@Marius cevabı doğru çözümdür.


\Psr\Log\LoggerInterface::classLütfen kullanın . Her zaman.
nevvermind

@nevvermind .. Daha önce bu denedim ... Fatal error: Non-static method Psr\Log\LoggerInterface::info() cannot be called statically. Daha kolay bir yol bulursanız lütfen bize bildirin.
Renon Stewart

Bahsettiğim :: sınıfın kelime yerine sabit dize FQCN.
nevvermind

3

Benim durumumda magento1 mage.php dosyasında yaptığımız gibi çok kısa kesilmiş aşağıdaki değişiklikleri yaparak tüm olayların listesini alabilirim:

Not: Sadece magento2.1.1 sürümünde test yaptım, bu yüzden başka bir sürümden emin değilim

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

public function dispatch

sonra tüm olayı debug.log dosyasında almak için aşağıdaki kodu yazın

$eventName = mb_strtolower($eventName); 

56. satıra yakın

\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->debug($eventName);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.