【问题标题】:Magento 1.6.2 event observer doesnt workMagento 1.6.2 事件观察器不起作用
【发布时间】:2012-10-25 11:15:20
【问题描述】:

我正在尝试在我的模块(app/code/community/Test/Shipping)中实现观察者。

我的文件是:app/code/community/Test/Shipping/etc/config.xml 仅全局部分

<global>
    <models>
        <test_shipping>
            <class>Test_Shipping_Model</class>
        </test_shipping>
    </models>
    <events>
        <checkout_type_onepage_save_order_after>
            <observers>
                <Test_Shipping_Observer>
                    <type>singleton</type>
                    <class>test_shipping/observer</class>
                    <method>checkout_type_onepage_save_order_after</method>
                </Test_Shipping_Observer>
            </observers>
        </checkout_type_onepage_save_order_after>
    </events>
</global>

app/code/community/Test/Shipping/Model/Observer.php 我替换了 curl 中的一些值,但经过测试并使用正确的值。

<?php

类 Test_Shipping_Model_Observer {

public function checkout_type_onepage_save_order_after(Varien_Event_Observer $observer) {
    $requests = array(
        "username" => "test",
        "password" => "test",
        "environment" => "development",
        "action" => "ship",
        "service_id" => "1"
    );
    $url = "";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requests));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch);
}

}

app/etc/modules/Test_Shipping.xml 带有开始和结束配置标签,无法在我的代码示例中获取它们。

<modules>
    <Test_Shipping>
        <active>true</active>
        <codePool>community</codePool>
    </Test_Shipping>
</modules>

但是观察者不起作用,有人可以帮助我吗?有没有办法检查方法是否被调用所以我会知道观察者工作但我的 curl 没有。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    您能告诉我们您的 config.xml 中的 &lt;config&gt;/&lt;modules&gt; 部分吗?

    无论如何,除了你的观察者的函数名对 magento 不友好之外,它应该可以工作(你应该像 executeCurlAfterOrderSave() 这样调用)

    确保它被称为:

    • 在后台激活日志功能(菜单系统/配置/开发人员/日志设置

    • 之后添加Mage::log('event just dispatched');

      Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order'=>$order, 'quote'=>$this->getQuote()));

    Mage_Checkout_Model_Type_Onepage 中调用(或Mage_Checkout_Model_Cart_Api 是您正在使用API​​) 注意:还原此仅用于调试目的的更改,因为您不得修改核心文件。

    • 在 Observer 方法的开头添加 Mage::log('even should be captured here');

    • 测试您的代码并查看 var/log 文件夹以查看是否发生了什么(已记录的内容)

    祝你好运

    【讨论】:

    • 1.0.1
    • Mage::log('事件刚刚发送');在日志中,但 Mage::log('甚至应该在此处捕获');没有,所以这意味着我的观察者不起作用
    • 是的。尝试在 中重命名 并按照我的建议重命名观察者函数。
    • 我猜现在观察者工作了......但是 Mage::log('even should be capture here'); 是正常的吗?在 Mage::log('event just dispatched'); 之前被记录?
    • 是的,这很正常,因为 displatchEvent 方法调用您的观察者(和您的日志)并且在 Mage::log('event just dispatched'); 行之前
    【解决方案2】:

    你的 config.xml 错误,

    <global>
    <models>
        <test_shipping>
            <class>Test_Shipping_Model</class>
        </test_shipping>
    </models>   
    </global>
    
     <events>
        <checkout_type_onepage_save_order_after>
            <observers>
                <Test_Shipping_Observer>
                    <type>singleton</type>
                    <class>test_shipping/observer</class>
                    <method>checkout_type_onepage_save_order_after</method>
                </Test_Shipping_Observer>
            </observers>
        </checkout_type_onepage_save_order_after>
    </events>
    

    【讨论】:

    • 放在 之外没有帮助
    • 不得不使用 ,现在我可以在日志中看到观察者被称为....thx alot
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多