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

时间:2014-07-25 19:45:00

标签: magento events soap

尽管我的观察员群众并未被触发。关于SO的问题,这个问题尚未涉及。

我设置了一个工作观察器来捕获事件checkout_submit_all_after。问题是这只有在我通过前端购买项目时才有效,而不是在我通过对shopppingCartOrder的SOAP调用触发事件时。订单本身是成功的,我也能够从Mage.php的dispatchEvent中记录该事件。

编辑:为了更清楚:事件正在生成,我可以通过Mage.php记录它。问题是观察者只有在使用SOAP生成事件时才会捕获它

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

config.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>

Observer.php:

class Company_Obsrv_Model_Observer
{

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

就像我说的那样,当我不使用SOAP时,观察者会工作,因此它不能成为我的功能代码或命名问题。请帮忙!

2 个答案:

答案 0 :(得分:1)

哎呀!这是该死的CACHE。我确信我把它关了。

答案 1 :(得分:0)

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

  1. 倾听更广泛的事件,例如sales_order_place_after。如果您不希望从管理区域触发此操作,则可以将事件配置移出全局节点并移入前端节点。

  2. 创建自定义SOAP端点并自行触发唯一事件:

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