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

时间:2012-02-09 04:06:42

标签: 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

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

Magento module Fatal error: Class 'Mage_Cashondelivery_Helper_Data' not found in \xampp\htdocs\magento\app\Mage.php on line 516

我正在使用Xampp 1.7.3和magento 1.6.1。 请帮忙。

1 个答案:

答案 0 :(得分: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>

源模型指定为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 ...
    );
}

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