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

16,399

The reason your module needs a helper class is the module argument in the system.xml file:

<cashondelivery translate="label" module="cashondelivery">

Magento passes the module argument to the Mage::helper() factory method. This in turn completes the class id to cashondelivery/data.

Mage::helper('cashondelivery');
// identical to Mage::helper('cashondelivery/data');

Now Magento checks for the class prefix to use by looking for the node global/helpers/cashondelivery/class which is missing.

Rather straightforward so far, but here is where it might be a little confusing for some.
If Magento doesn't find a helper class prefix, it tries to makes one up by prefixing the class id with mage_ and appending _helper.
So this gives you mage_cashondelivery_helper as the class prefix, and mage_cashondelivery_helper_data as the full class name.

The autoloader turns this into Mage/Cashondelivery/Helper/Data.php, which can't be found, and hence the exception you are experiencing.

Besides creating the Companyname_Cashondelivery_Helper_Data class, you need to add the class group mapping to your config.xml file as follows:

<global>
  <helpers>
    <cashondelivery>
      <class>Companyname_Cashondelivery_Helper</class>
    </cashondelivery>
  </helpers>
</global>

This class group to class prefix mapping is all you are missing.

Share:
16,399
naquiuddin
Author by

naquiuddin

Updated on July 19, 2022

Comments

  • naquiuddin
    naquiuddin almost 2 years

    I am developing a payment Module for Magento. I did this using this tutorial

    http://www.magentocommerce.com/wiki/5_-_modules_and_development/payment/create-payment-method-module

    I have created folder

    app/local/Companyname/Cashondelivery/Block
    app/local/Companyname/Cashondelivery/Model
    app/local/Companyname/Cashondelivery/controller
    app/local/Companyname/Cashondelivery/etc
    app/local/Companyname/Cashondelivery/helpers
    

    The etc/config.xml

        <?xml version="1.0"?>
        <config>
            <modules>
               <Companyname_Cashondelivery>
        <!-- declare module's version information for database updates -->
                  <version>0.1.0</version>
               </Companyname_Cashondelivery>
            </modules>
    
            <global>
    
    
        <!-- declare model group for new module -->
                <models>
        <!-- model group alias to be used in Mage::getModel('newmodule/...') -->
                    <createorder>
        <!-- base class name for the model group -->
                        <class>Companyname_Cashondelivery_createorder</class>
                    </createorder>
                </models>
    
        <!-- declare resource setup for new module -->
                <resources>
        <!-- resource identifier -->
                    <cashondelivery_setup>
        <!-- specify that this resource is a setup resource and used for upgrades -->
                        <setup>
        <!-- which module to look for install/upgrade files in -->
                            <module>Companyname_Cashondelivery</module>
                        </setup>
        <!-- specify database connection for this resource -->
                        <connection>
        <!-- do not create new connection, use predefined core setup connection -->
                            <use>core_setup</use>
                        </connection>
                    </cashondelivery_setup>
                    <cashondelivery_write>
                        <connection>
                          <use>core_write</use>
                        </connection>
                    </cashondelivery_write>
                    <cashondelivery_read>
                       <connection>
                        <use>core_read</use>
                      </connection>
                    </cashondelivery_read>
                </resources>
            </global>
    
        <!-- declare default configuration values for this module -->
            <default>
        <!-- 'payment' configuration section (tab) -->
                <payment>
        <!-- 'newmodule' configuration group (fieldset) -->
                    <cashondelivery>
        <!-- by default this payment method is inactive -->
                        <active>0</active>
        <!-- model to handle logic for this payment method -->
                        <model>cashondelivery/createorder</model>
        <!-- order status for new orders paid by this payment method -->
                        <order_status>pending</order_status>
        <!-- default title for payment checkout page and order view page -->
                        <title>Companyname</title>                
                    </cashondelivery>
                 </payment>
            </default>
    </config>
    

    The app/local/Companyname/Modulename/etc/system.xml

    <?xml version="1.0"?>
    <config>
       <sections>
            <payment>
                <groups>
                    <cashondelivery translate="label" module="cashondelivery">
                        <label>Cash On Delivery</label>
                        <frontend_type>text</frontend_type>
                        <sort_order>10</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                        <!--<comment>[CDATA[<a href="http://celinks.magento.com/authorize_netRegistration" target="_blank">Click here to sign up for an Authorize.net account</a>]]></comment>-->
                        <fields>
                            <active translate="label">
                                <label>Enabled</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>1</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </active>
                            <email_customer translate="label">
                                <label>Email Customer</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>10</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </email_customer>
                            <login translate="label">
                                <label>API Login ID</label>
                                <frontend_type>obscure</frontend_type>
                                <backend_model>adminhtml/system_config_backend_encrypted</backend_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>
                            </login>
    
                            <merchant_email translate="label">
                                <label>Merchant's Email</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>11</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </merchant_email>
                            <order_status translate="label">
                                <label>New Order Status</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_order_status_processing</source_model>
                                <sort_order>4</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </order_status>
                            <sort_order translate="label">
                                <label>Sort Order</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>100</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </sort_order>
                            <test translate="label">
                                <label>Test Mode</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>5</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </test>
                            <debug translate="label">
                                <label>Debug</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>6</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </debug>
                            <title translate="label">
                                <label>Title</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>2</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>1</show_in_store>
                            </title>
    
                            <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>
                            <cgi_url>
                                <label>Gateway URL</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>5</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </cgi_url>                        
                            <min_order_total translate="label">
                                <label>Minimum Order Total</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>98</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </min_order_total>
                            <max_order_total translate="label">
                                <label>Maximum Order Total</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>99</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </max_order_total>
                            <allow_partial_authorization translate="label">
                                <label>Allow Partial Authorization</label>
                                <frontend_type>select</frontend_type>
                                <source_model>adminhtml/system_config_source_yesno</source_model>
                                <sort_order>110</sort_order>
                                <show_in_default>1</show_in_default>
                                <show_in_website>1</show_in_website>
                                <show_in_store>0</show_in_store>
                            </allow_partial_authorization>                     
                            <model>
                            </model>
                        </fields>
                    </cashondelivery>
                </groups>
            </payment>
        </sections>
    </config>
    

    Then I created a model class

    <?php 
    /**
    * Our test CC module adapter
    */
    class Companyname_Cashondelivery_Model_createorder extends Mage_Payment_Model_Method_Cc
    {
        /**
        * unique internal payment method identifier
        *
        * @var string [a-z0-9_]
        */
        protected $_code = 'newmodule';
    
        /**
         * Here are examples of flags that will determine functionality availability
         * of this module to be used by frontend and backend.
         *
         * @see all flags and their defaults in Mage_Payment_Model_Method_Abstract
         *
         * It is possible to have a custom dynamic logic by overloading
         * public function can* for each flag respectively
         */
    
        /**
         * Is this payment method a gateway (online auth/charge) ?
         */
        protected $_isGateway               = true;
    
        /**
         * Can authorize online?
         */
        protected $_canAuthorize            = true;
    
        /**
         * Can capture funds online?
         */
        protected $_canCapture              = false;
    
        /**
         * Can capture partial amounts online?
         */
        protected $_canCapturePartial       = false;
    
        /**
         * Can refund online?
         */
        protected $_canRefund               = false;
    
        /**
         * Can void transactions online?
         */
        protected $_canVoid                 = true;
    
        /**
         * Can use this payment method in administration panel?
         */
        protected $_canUseInternal          = true;
    
        /**
         * Can show this payment method as an option on checkout payment page?
         */
        protected $_canUseCheckout          = true;
    
        /**
         * Is this payment method suitable for multi-shipping checkout?
         */
        protected $_canUseForMultishipping  = true;
    
        /**
         * Can save credit card information for future processing?
         */
        protected $_canSaveCc = false;
    
        /**
         * Here you will need to implement authorize, capture and void public methods
         *
         * @see examples of transaction specific public methods such as
         * authorize, capture and void in Mage_Paygate_Model_Authorizenet
         */        
    }
    ?>
    

    I have even created a file in app/local/Companyname/Cashondelivery/Helper/Data.php

    <?php
    class Companyname_Cashondelivery_Helper_Data extends Mage_Core_Helper_Abstract
    {
    }
    ?>
    

    But I get an error when I open Configuration>Payment Methods

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

    Is it necessary to have a Helper class. I have no idea about the helpers and Data.php

  • naquiuddin
    naquiuddin about 12 years
    Thanks vinai. That problem solved. I have added the xml code in config.xml. But I am wondering why Am I this error for the same above code. Fatal error: Call to a member function toOptionArray() on a non-object in D:\xampp\htdocs\magento\app\code\core\Mage\Adminhtml\Block\S‌​ystem\Config\Form.ph‌​p on line 421
  • naquiuddin
    naquiuddin about 12 years
    I have added a question for this stackoverflow.com/questions/9205289/…
  • Bhavik Shah
    Bhavik Shah about 11 years
    Thanks a lottttttttttt, dude. I was going crazy about this. Your post has been very helpful.
  • underscorePez
    underscorePez almost 10 years
    This is a really clear explanation of what Magento is trying to do here - helped me a lot with my Namespace_MixedCaseModuleName and getting a helpers reference.