致命错误:在非对象上调用成员函数toOptionArray()

naq*_*din 0 php zend-framework magento

我正在Magento开发一个支付方法模块.当我在配置Magento中单击付款方式菜单时,我收到以下错误

Fatal error: Call to a member function toOptionArray() on a non-object in
\xampp\htdocs\magento\app\code\core\Mage\Adminhtml\Block\System\Config\Form.php
on line 421
Run Code Online (Sandbox Code Playgroud)

请参阅以下链接,了解我正在开发的模块代码

Magento模块致命错误:在第516行的\ xampp\htdocs\magento\app\Mage.php中找不到类'Mage_Cashondelivery_Helper_Data'

我使用的是Xampp 1.7.3和magento 1.6.1.请帮忙.

Vin*_*nai 6

在system.xml中,您有以下代码

<payment_action translate="label">
    <label>Payment Action</label>
    <frontend_type>select</frontend_type>
    <source_model>cashondelivery/createorder</source_model>
    <sort_order>2</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
</payment_action>
Run Code Online (Sandbox Code Playgroud)

源模型指定为cashondelivery/createorder.
根据您在引用的问题中发布的代码,此类是付款方式模型,而不是源模型.
如果toOptionArray()在模型上实现该方法,它也可以作为系统配置源模型使用,但这似乎不是一个糟糕的选择.
我猜你正在寻找的源模型是这样的paygate/authorizenet_source_paymentAction.

背景

Magento中的源模型用于提供选择和多选的选项列表.为此目的,他们实施该toOptionArray()方法.
选项以具有以下格式的数组的形式返回:

public function toOptionArray()
{
    return array(
        array('value' => $value1, 'label' => 'The label for option 1'),
        array('value' => $value2, 'label' => 'The label for option 2'),
        array('value' => $value3, 'label' => 'The label for option 3')
        // ... etc ...
    );
}
Run Code Online (Sandbox Code Playgroud)

系统配置源模型不需要扩展超类,也不需要实现任何方法toOptionArray().
EAV select和multiselect属性也使用源模型,但那些需要扩展 eav/entity_attribute_source_abstract并且更复杂,所以我不会在这个地方详细介绍.