例如,Mage_Sales_Model_Order
您有一个名为sendNewOrderEmail()
运行此 appEmulation 的方法,并生成要嵌入到电子邮件中的 paymentBlocks。有人告诉我这样做是为了模拟前端存储并准确地生成所述块......
但是在该 appEmulation 下调用的方法是否也会触发我的自定义模块上的观察者?
谢谢!
例如,Mage_Sales_Model_Order
您有一个名为sendNewOrderEmail()
运行此 appEmulation 的方法,并生成要嵌入到电子邮件中的 paymentBlocks。有人告诉我这样做是为了模拟前端存储并准确地生成所述块......
但是在该 appEmulation 下调用的方法是否也会触发我的自定义模块上的观察者?
谢谢!
简而言之,没有。app->loadArea([AREA])
通过在动作控制器超类中的调用启用特定区域的事件preDispatch()
;见Mage_Core_Controller_Varien_Action::preDispatch()
(链接)。这些区域由子类Mage_Core_Controller_Front_Action
和Mage_Adminhtml_Controller_Action
.
如果在脚本执行期间评估调度代码(例如调用Mage::dispatchEvent()
),则调度事件。但是,如果观察者被配置为特定区域(例如frontend
和adminhtml
),那么除非加载该区域,否则这些事件将不会调度。
对于最后一点参考,请参阅Mage_Core_Model_App_Emulation::startEnvironmentEmulation()
并注意它不调用区域的负载。
我刚刚通过铃声试图找出你问的完全相同的问题。我试图建立一个外部 SSO 登录。我注意到在 Mage_Customer 模块等中没有触发任何控制器事件。相同的方法应该适用于您,只需确定要模拟的控制器并确保在代码中调度相同的事件。
我已经在这里发布了我所有研究的结果......
如何从外部脚本触发 config.xml 中 <frontend> 中的 <controller_action_predispatch> 的无控制器核心 Magento 模块
回想起来,你可能已经用类似的方法用这个'core/app_emulation'解决了我的问题。我将不得不更多地研究它。