Magento - 获取发送事件的 class

Magento - get class that dispatched an event

有没有办法获取在 Magento 中调度事件的 class?

你可以通过下面的代码得到正在调用的class,但是有相反的功能吗?

$observer->getEvent()->getBlock();

遗憾的是,我认为没有办法做到这一点。 Magento 中的事件通过 Mage::dispatchEvent()

发送

这个函数的定义可以在app/Mage.php第445行

附近找到
/**
 * 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())
{
    Varien_Profiler::start('DISPATCH EVENT:'.$name);
    $result = self::app()->dispatchEvent($name, $data);
    Varien_Profiler::stop('DISPATCH EVENT:'.$name);
    return $result;
}

正如您所看到的,Magento 中没有任何强制 class 正在调度事件来说明自身的任何内容。

lib/Varien/Event.phplib/Varien/Event/Observer.php 中仅此而已,它们是 Magento 中 event/observer 模式中涉及的 classes。

虽然,有时候,一个事件可能会给你 $this 作为他的数据,就像这个例子:

./app/code/core/Mage/Wishlist/Model/Wishlist.php:222:  
Mage::dispatchEvent('wishlist_item_add_after', array('wishlist' => $this));

但在应用程序设计中没有任何强制要求,因此您永远不会知道。