Есть ли способ получить класс, в котором событие было отправлено в Magento?
Вы можете получить класс, который вызывается с использованием приведенного ниже кода, но есть ли противоположная функция?
$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 нет ничего, заставляющего класс, который посылает событие, чтобы что-то сказать о себе.
Ничего больше в lib/Varien/Event.php
или в lib/Varien/Event/Observer.php
которые являются классами, связанными с шаблоном event/observer в Magento.
Хотя иногда событие может дать вам $this
как его данные, как в этом примере:
./app/code/core/Mage/Wishlist/Model/Wishlist.php:222:
Mage::dispatchEvent('wishlist_item_add_after', array('wishlist' => $this));
Но в дизайне приложения нет ничего, что бы вы не знали.