Magento getEvent() - > getOrder为空

时间:2014-04-03 09:48:05

标签: class magento observers

我正在尝试让Observer工作以查看是否通过支票/支票付款,我知道Observer正在使用,因为我有一个日志记录显示。但是,当我尝试访问订单时,它是空的或不会打印到日志文件。

应用程序的/ etc /模块/ Foo_Bar.xml

<?xml version="1.0"?>
    <config>
        <modules>
            <Foo_Bar>
                <active>true</active>
                <codePool>local</codePool>
            </Foo_Bar>
        </modules>
    </config>

应用程序/代码/本地/富/酒吧的/ etc / config.xml中

<?xml version="1.0" encoding="UTF-8" ?>
    <config>
        <global>
            <models>
                <foo_bar>
                    <class>Foo_Bar_Model</class>
                </foo_bar>
            </models>

            <events>
                <sales_order_payment_place_end> <!-- event -->
                    <observers>
                        <foo_bar> <!-- unique for event -->
                                                         <!-- type: singleton | disable | model -->
                            <class>foo_bar/observer</class>
                            <method>SalesOrderPaymentPlaceEnd</method>
                        </foo_bar>
                    </observers>
                </sales_order_payment_place_end>
            </events>
        </global>
    </config>

应用程序/代码/本地/富/酒吧/型号/ Observer.php

<?php
class Foo_Bar_Model_Observer
{
    public function SalesOrderPaymentPlaceEnd(Varien_Event_Observer $observer)
    {
        Mage::log('Location: SalesOrderPaymentPlaceEnd');
        $order = $observer->getEvent()->getOrder();
        Mage::log('order: '.$order);
    }
}

第一个日志按预期工作,但我确定getOrder()不起作用,因为我的第二个日志条目只打印'order:'。

由于

2 个答案:

答案 0 :(得分:0)

@James已经评论了这个......我正在解释

“sales_order_payment_place_end”事件位于“app \ code \ core \ Mage \ Sales \ Model \ Order \ Payment.php”中。

该事件只有一个参数是付款。所以

$order = $observer->getEvent()->getOrder();

不起作用。你需要使用

 $orderPayment = $observer->getEvent()->getPayment();

答案 1 :(得分:0)

对我有用的是:

public function autoInvoiceForOfflinePayment(Varien_Event_Observer $observer)
{
  $order = $observer->getEvent()->getPayment()->getOrder();    
  // In my case I was trying to get the payment method code, e.g.
  $order->getPayment()->getMethodInstance()->getCode()
}

我希望这有帮助(Magento EE 1.14.2)

我发现的,我忘记并经常在创建钩子时再次发现的是查看调度事件的文件中的行: 例如“应用程序\代码\核心\法师\销售\型号\订单\ Payment.php” Mage :: dispatchEvent('sales_order_payment_place_end',array('payment'=&gt; $ this));

因此,您希望先获取事件,然后在数组中获取付款变量: $ order = $ observer-&gt; getEvent() - &gt; getPayment();

从那里你可以获得该文件中的任何公共功能,同样的原则似乎贯穿始终。