Class Magento getEvent()->;getOrder为空

Class Magento getEvent()->;getOrder为空,class,magento,observers,Class,Magento,Observers,我正试图让一个观察员工作,看看是否已通过支票/支票付款,我知道观察员正在使用,因为我有一个日志记录显示。但是,当我尝试访问订单时,它要么是空的,要么不会打印到日志文件中 app/etc/modules/Foo_Bar.xml <?xml version="1.0"?> <config> <modules> <Foo_Bar> <active>true<

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

app/etc/modules/Foo_Bar.xml

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

真的
地方的
app/code/local/Foo/Bar/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>

Foo_-Bar_模型
富巴尔/观察员
SalesOrderPaymentPlaceEnd
app/code/local/Foo/Bar/Model/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);
    }
}

@James已经对此发表了评论..我正在解释

事件“sales\u order\u payment\u place\u end”位于“app\code\core\Mage\sales\Model\order\payment.php”中

事件只有一个参数是Payment。所以

$order = $observer->getEvent()->getOrder();
这是行不通的。你需要使用

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

对我有效的方法如下:

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()
}
我希望这有帮助(MagentoEE1.14.2)

我发现,在创建钩子时,我忘记并经常再次发现的是查看发送事件的文件中的行: e、 g.“app\code\core\Mage\Sales\Model\Order\Payment.php” Mage::dispatchEvent('sales\u order\u payment\u place\u end',数组('payment'=>$this))

因此,您希望首先获取事件,然后在数组中获取payment变量: $order=$observer->getEvent()->getPayment()

从那里你可以得到该文件中的任何公共函数,同样的原则似乎适用于整个文件。

试试这个$observer->getEvent()->getPayment();