通过 SOAP 触发时,观察者未捕获 Magento 事件

问题描述 投票:0回答:2

尽管 SO 上存在大量“我的观察者没有被触发”的问题,但这一问题尚未被涵盖。

我设置了一个working观察者来捕获事件 checkout_submit_all_after。问题是,这仅在我通过前端购买商品时有效,而在我通过对 shopppingCartOrder 的 SOAP 调用触发事件时无效。订单本身是成功的,我也可以从 Mage.php 的dispatchEvent 记录该事件。

编辑:为了更清楚地说明这一点:事件正在生成,我可以通过 Mage.php 记录它。问题在于,仅当使用 SOAP 生成事件时,观察者才捕获它

正如您从下面的 config.xml 中看到的,我使用的是全局范围,因此观察者应该在所有情况下处理它(如果我的理解是正确的)。当我调用 SOAP 时,我还需要做些什么才能让我的观察者触发吗?另外,我尝试了各种其他事件,但仍然没有触发。

配置.xml:

<config>

    <modules>
        <Company_Obsrv>
            <version>0.0.1</version>
        </Company_Obsrv>
    </modules>

    <global>
       <models>
            <!--
                Unique identifier in the model's node.
                By convention, we put the module's name in lowercase.
            -->
            <company_obsrv>
            <!--path-->
                <class>Company_Obsrv_Model</class>
            </company_obsrv>

        </models>

        <events>
            <checkout_submit_all_after>
                <observers>
                    <company_obsrv>
                        <class>company_obsrv/observer</class>
                        <method>observeTest</method>
                        <type>singleton</type>
                    </company_obsrv>
                </observers>
            </checkout_submit_all_after>
        </events>
    </global>   

</config>

观察者.php:

class Company_Obsrv_Model_Observer
{

    public function observeTest(Varien_Event_Observer $observer)
    {
       Mage::log('CALLED!', null, 'newlog.log', true); 
    } 
}

就像我说的,观察者在我不使用 SOAP 时工作,所以这不可能是我的函数代码或命名问题。请帮忙!

events magento soap magento-soap-api
2个回答
1
投票

咕噜!那是该死的缓存。我确定我把它关掉了。


0
投票

如果通过 SOAP 下订单时未触发此特定事件,有两种解决方案:

  1. 聆听更广义的事件,例如

    sales_order_place_after
    。如果您不希望从管理区域触发此事件,您可以将事件配置从全局节点移出并移至前端节点。

  2. 创建自定义 SOAP 端点并自行触发独特的事件:

    Mage::dispatchEvent('soap_order_place_after', array('order'=>$order));

© www.soinside.com 2019 - 2024. All rights reserved.