我认为每个模型保存后都会有一个事件。 这是如何格式化的,有没有办法记录所有这些事件?
如果您要扩展的模块中没有声明标准事件,这将非常有用。
答案 0 :(得分:6)
查看Mage_Core_Model_Abstract::afterCommitCallback - 它有一个通用事件和由保存的特定模型的前缀调度的事件。
/**
* Callback function which called after transaction commit in resource model
*
* @return Mage_Core_Model_Abstract
*/
public function afterCommitCallback()
{
Mage::dispatchEvent('model_save_commit_after', array('object'=>$this));
Mage::dispatchEvent($this->_eventPrefix.'_save_commit_after', $this->_getEventData());
return $this;
}
您是否需要此或
/**
* Processing object after save data
*
* @return Mage_Core_Model_Abstract
*/
protected function _afterSave()
{
$this->cleanModelCache();
Mage::dispatchEvent('model_save_after', array('object'=>$this));
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
return $this;
}
取决于您是否关心在运行事件处理程序时数据是否已实际写入数据库。
当Magento看到对Mage::dispatchEvent
的调用时,它将调用为该特定事件名称注册的任何公共模型类。因此,查找事件的真实位置在您感兴趣的模块/模型的config.xml中.Xml不太可能以编程方式生成,因此您不必大惊小怪地猜测{{1} }值。您知道所需的事件后缀,因此只需查看名称以该后缀结尾的事件的配置。
如果您有已安装的商店,则可以使用n98-magerun搜索config.xml。 (它有一个可用于搜索的config:get命令,但我更喜欢_eventPrefix
到文件,然后使用xml解析器和xpath来搜索结果。)
答案 1 :(得分:6)
以下是我认为最佳答案将基于您提供的所有信息。
为了使某个事件对该模型唯一,$ this-> _eventPrefix必须对该模型唯一
查找您要查找的特定事件
如果您使用IDE,这应该更容易,但您也可以使用grep等实用程序。
_load_before
_load_after
_save_before
_save_after
_save_commit_after
_delete_before
_delete_after
_delete_commit_after
_clear
要记录所有事件,请转到app / Mage.php第446行并添加:
Mage::setIsDeveloperMode(true);
Mage::log($name);
答案 2 :(得分:1)
我总是将app/Mage.php
的日志记录到dispatchEvent() method
...
Mage::log($name, array_keys($event_data));
...
然后我在浏览器中刷新页面,我需要应用自定义事件操作,然后查看system.log以查看我的页面上发生了什么事件。
答案 3 :(得分:0)
只需在config.xml中输入如下内容:
<global>
<events>
<catalog_entity_attribute_save_commit_after>
<observers>
<yourextension_save_commit_after_observer>
<type>singleton</type>
<class>yourextension/save_commit_after_observer</class>
<method>yourMethod</method>
</yourextension_save_commit_after_observer>
</observers>
</catalog_entity_attribute_save_commit_after>
</events>
</global>
答案 4 :(得分:0)
这是对的。每次保存模型后都会有_save_before和_save_after事件,例如catalog_product_before_save,catalog_product_after_save,customer_address_before_save,customer_address_after_save等。
您可以参考以下链接,了解有关如何使用它的更完整信息以及Magento中所有活动的完整列表。
来源:http://www.vjtemplates.com/blog/magento/events-and-observers