【问题标题】:Resource function - magento资源函数——magento
【发布时间】:2014-07-07 09:50:06
【问题描述】:

我正在尝试在 magento 中创建新的扩展。我为我们的扩展创建了自定义表。我想从我们的自定义表中选择值。为此,我尝试了以下操作。

在我们的 Company_name/Module_name/Model/file.php 中,我使用了以下代码来调用 Resource 函数。

return Mage::getResourceModel('Modulename/filename')->functionName();

它在我们的项目上运行良好

但是如果我使用下面的sn-p,

return $this->_getResource()->functionname();

返回以下错误

a:5:{i:0;s:20:"Resource is not set.";i:1;s:3048:"#0 /var/www/magento/app/code/core/Mage/Core/Model/Abstract.php(136): Mage::throwException('Resource is not...')

我还通过将以下代码添加到模块/etc/config.xml 来配置我们的资源类

<models>
    <modulename>
        <class>Companyname_Modulename_Model_Filename</class>
        <resourceModel>modulename_resource</resourceModel>
    </modulename>
    <modulename_resource>
        <class>Companyname_Modulename_Model_Resource</class>
    </modulename_resource>
</models>

我不知道我在哪里犯了错误。如果你知道让我知道。提前致谢。

【问题讨论】:

    标签: magento


    【解决方案1】:

    查看资源模型定义

    <?php
    protected function _getResource()
    {
        if (empty($this->_resourceName)) {
            Mage::throwException(Mage::helper('core')->__('Resource is not set.'));
        }
    
        return Mage::getResourceSingleton($this->_resourceName);
    }
    

    因此,当 Mage_Core_Model_Abstract 类的 $_resourceName 未设置或为空时,它会引发异常。所以在调用_getResource() 方法之前,只需设置该变量。那是

      $this->_resourceName = 'modulename/filename';
      $this->_getResource()->functionname();
    

    你也可以用这个。

      $this->_setResourceModel('modulename/filename');
      return $this->_getResource()->functionname();
    

    希望对您有所帮助。

    【讨论】:

    • 在magento核心模块中,比如目录,时事通讯我没见过$this->_getResource..这就是我被问到的原因。
    • 这个方法在app/code/core/Mage/Core/Model/Abstract.php中定义。我的回答对你有没有帮助?
    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2014-07-24
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多