无法将<source_model>属性用于Magento中的System.XML </source_model>

时间:2013-11-06 23:37:28

标签: php xml magento shipping

我刚刚完成了我的一个自定义运输方法,它在main方法中有多种方法。所以我想让“允许的方法”列表显示在“管理”部分中。所以我在system.xml

中遇到了阻塞
 <allowed_methods translate="label">
    <label>Allowed Methods</label>
    <frontend_type>multiselect</frontend_type>
    <source_model>mycompany_shipping/carrier_somefolder_definitions_methods</source_model>
    <sort_order>20</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    <can_be_empty>1</can_be_empty>
 </allowed_methods>

但是Magento找不到我的课,因为它总是看着“法师”而不是“本地”,它只是抛出这个错误,

include(Mage/Mycompany/Shipping/Model/Carrier/Somefolder/Definitions/Methods.php): 
failed to open stream: No such file or directory  in /Development/trunk/lib/Varien/Autoload.php on line 93

但我的班级是local/Mycompany/Shipping/Model/Carrier/Somefolder/Definitions/Methods.php,班级名称是Mycompany_Shipping_Model_Carrier_Somefolder_Definitions_Methods

我想我的config.xml中可能遗漏了一些东西,所以这是我的config.xml

<global>
    <models>
        <mycompshipping>
            <class>Mycompany_Shipping_Model</class>
        </mycompshipping>
    </models>
    <resources>
        <mycompshipping_setup>
            <setup>
                <module>Mycompany_Shipping</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </mycompshipping_setup>
    </resources>
</global>
<default>
    <carriers>
        <mycompanyrate>
            <model>Mycompany_Shipping_Model_Carrier_Mycompanyrate</model>
        </mycompanyrate>
    </carriers>
</default>

为什么Magento无法找到我的班级?

1 个答案:

答案 0 :(得分:3)

如果Magento在您的课程之前添加Mage,则几乎总是意味着您的配置错误。

浏览您提供的信息,您的源模型配置为

mycompany_shipping/carrier_somefolder_definitions_methods

这是mycompany_shipping的群组名称和carrier_somefolder_definitions_methods的班级名称。这意味着Magento将通过调用

来实例化您的源模型
Mage::getModel('mycompany_shipping/carrier_somefolder_definitions_methods');

但是,请查看您的config.xml

<models>
    <mycompshipping>
        <class>Mycompany_Shipping_Model</class>
    </mycompshipping>
</models>

您已将模块配置为“声明”模型组名称mycompshipping。这意味着当您实例化模块的类时,使用表单

//instantiates as `Mycompany_Shipping_Model_Carrier_Mycompanyrate`
Mage::getModel('mycompshipping/carrier_mycompanyrate');

您需要更正system.xml以实例化正确的源模型,或更改config.xml以显示正确的组名。