1

例如,Mage_Sales_Model_Order您有一个名为sendNewOrderEmail()运行此 appEmulation 的方法,并生成要嵌入到电子邮件中的 paymentBlocks。有人告诉我这样做是为了模拟前端存储并准确地生成所述块......

但是在该 appEmulation 下调用的方法是否也会触发我的自定义模块上的观察者?

谢谢!

4

2 回答 2

3

简而言之,没有。app->loadArea([AREA])通过在动作控制器超类中的调用启用特定区域的事件preDispatch();见Mage_Core_Controller_Varien_Action::preDispatch()(链接)。这些区域由子类Mage_Core_Controller_Front_ActionMage_Adminhtml_Controller_Action.

如果在脚本执行期间评估调度代码(例如调用Mage::dispatchEvent()),则调度事件。但是,如果观察者被配置为特定区域(例如frontendadminhtml),那么除非加载该区域,否则这些事件将不会调度。

对于最后一点参考,请参阅Mage_Core_Model_App_Emulation::startEnvironmentEmulation()并注意它不调用区域的负载。

于 2013-01-09T21:47:53.350 回答
0

我刚刚通过铃声试图找出你问的完全相同的问题。我试图建立一个外部 SSO 登录。我注意到在 Mage_Customer 模块等中没有触发任何控制器事件。相同的方法应该适用于您,只需确定要模拟的控制器并确保在代码中调度相同的事件。

我已经在这里发布了我所有研究的结果......

如何从外部脚本触发 config.xml 中 <frontend> 中的 <controller_action_predispatch> 的无控制器核心 Magento 模块

回想起来,你可能已经用类似的方法用这个'core/app_emulation'解决了我的问题。我将不得不更多地研究它。

于 2013-01-09T21:27:14.913 回答