ম্যাজেন্টো 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;
    }

ম্যাজেন্টো 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



@ মারিয়াস কীওয়ার্ড সহ একটি টাইপো o সুরক্ষিত $ লগার পরিবর্তে সুরক্ষিত।
হাইজেরোম

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

@ মারিয়াস উত্তর সঠিক সমাধান।


\Psr\Log\LoggerInterface::classদয়া করে ব্যবহার করুন সর্বদা.
নেভভারমাইন্ড

@nevvermind .. আমি যে চেষ্টা করার আগে ... Fatal error: Non-static method Psr\Log\LoggerInterface::info() cannot be called statically। আপনি যদি কোনও সহজ উপায় বের করেন তবে দয়া করে আমাকে জানান।
রেনন স্টুয়ার্ট

আমি আক্ষরিক স্ট্রিং এফকিউসিএন এর পরিবর্তে :: ক্লাস কীওয়ার্ড সম্পর্কে বলছি ।
নেভভারমাইন্ড

3

আমার ক্ষেত্রে আমি নীচে পরিবর্তনগুলি করে সমস্ত ইভেন্টের তালিকা পেতে পারি যা খুব কম শর্ট কাট যেমন আমরা ম্যাজেন্টো 1 এর mage.php ফাইলটিতে করি:

দ্রষ্টব্য: আমি কেবল 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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.