我目前正在创建一个模块,允许后端用户管理客户允许的付款方式。 Magento事件/观察者帮助很大 - 我需要做的关于客户的所有事情都很好地被这个系统所吸引并转移到我的代码中。但我还需要挂钩创建付款方式的事件(注册新的付款方式模块)。我知道在Magento中没有这样的事件(如果我错了,请纠正我),但是我需要一些解决方法来实现这样的功能(很好/正确的方式)。
所以这是一个问题:
在Magento中管理(挂钩)支付方式创建(支付模块注册)事件的最佳(好/右)方法是什么?
抱歉语言不好......谢谢你的回答!
答案 0 :(得分:2)
模块安装在应用程序初始化的早期发生;实际上,它发生在事件区域被解析之前,因此无法触发事件观察者。见Mage_Core_Model_App::run()
。请注意loadAreaPart()
(触发加载事件观察者配置)如何在 _initModules()
之后调用(我们在其中找到模块安装调用Mage_Core_Model_Resource_Setup::applyAllUpdates()
)。因此,标准事件调度将毫无意义。
从一般的应用程序设计角度来看,我认为为此目的使用Magento的事件驱动架构是过度的。任何模块安装都必须触及数据库。您应该实现自己的资源设置类,而不是让通用的观察者查看所有模块安装,而是从Mage_Core_Model_Resource_Setup
扩展 - 几个核心模块执行此操作。在此自定义安装资源类中,您可以执行您当前正在考虑的任何任务(发送电子邮件,记录一些信息,将更多记录写入数据库等)。从这里开始,您和您的开发人员将要求每个新的支付模块使用此设置资源来安装支付模块。
答案 1 :(得分:1)
您可能会研究模块安装。特别是,所有模块都插入到数据库中:
core_resource
我还建议从:
开始Mage_Core_Model_Resource_Setup
也许debug_backtrace()可以帮到你。当您第一次放置模块时,您可以回溯它的安装方式。
更新1
尝试追踪以下功能:
/**
* Processing object after save data
*
* @return Mage_Core_Model_Abstract
*/
protected function _afterSave()
{
/**
* Callback function which called after transaction commit in resource model
*
* @return Mage_Core_Model_Abstract
*/
public function afterCommitCallback()
{
/**
* Get array of objects transfered to default events processing
*
* @return array
*/
protected function _getEventData()
{
请指出你的最后一个目标。也许存在比通过观察者更好的解决方案。