我正在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
请参阅以下链接,了解我正在开发的模块代码
我正在使用Xampp 1.7.3和magento 1.6.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
并且更复杂,所以我不会在这个地方详细介绍。