Неустранимая ошибка: вызов функции-члена toOptionArray () для объекта без объекта

Я разрабатываю модуль метода оплаты в 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 Fatal error: Class 'Mage_Cashondelivery_Helper_Data' не найден в \ xampp \ htdocs \ magento \ app \ Mage.php в строке 516

Я использую Xampp 1.7.3 и magento 1.6.1. Пожалуйста помоги.

В вашем 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 модель указана как 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 и являются более сложными, поэтому я не буду более подробно eav/entity_attribute_source_abstract на этом месте.