Magento XML和实例化博客文章模型


Magento XML and instantiating a blogpost Model

与这个人非常相似,我试图按照Alan Storm的教程来实例化一个模型。我不太确定为什么它不起作用。

我尽可能密切地遵循教程。我能够达到以下错误的地步:

"警告:包括(法师/公司/我的模块名称/模型/艺术品.php):无法打开流:没有这样的文件或目录"

但是我一直无法显示类名(请参阅索引控制器.php)。

当我尝试实例化我的模型时,问题就出现了。我怀疑这个问题可能与一些次要的语义有关,所以我试图在我的网络清理过程中密切关注大写。

可以使用任何帮助来说明我可能做错了什么?

我的文件结构如下:

[app]
    [code]
        [local]
            [Company]
                [MyModuleName]
                    [block]
                    [controllers]
                        IndexController.php
                    [etc]
                        config.xml
                        system.xml
                    [Helper]
                        Data.php
                    [Model]
                        Artwork.php
                    [sql]

我的 XML 如下所示:

<config>
    <!-- ... -->
    <global>
         <!-- ... -->
         <models>
             <MyModuleName>
                 <class>Company_MyModuleName_Model</class>
                 <resourceModel>MyModuleName_mysql4</resourceModel>
             </MyModuleName>
         </models>
         <!-- ... -->
    </global>
    <frontend>
        <routers>
            <Company_MyModuleName>
                <use>standard</use>
                <args>
                    <module>Company_MyModuleName</module>
                    <frontName>frontname</frontName>
                </args>
            </Company_MyModuleName>
    </routers>  
</frontend>
    <!-- ... -->
</config> 

如果我的模型成功实例化$blogpost则应在 http://domain.com/frontname/index/testModel 处显示我的类名。

文件:app/code/local/Company/MyModuleName/controllers/IndexController.php

class Company_MyModuleName_IndexController extends Mage_Core_Controller_Front_Action {
    public function testModelAction() {
        $blogpost = Mage::getModel('company_mymodulename/artwork');
        echo get_class($blogpost);
    }
}

文件:应用程序/代码/本地/公司/我的模块名称/模型/艺术品.php

class Company_MyModuleName_Model_Artwork extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {
        $this->_init('company_mymodulename/artwork');
    }
}

两件事立即弹出。 首先,我假设您正在尝试使用如下所示的代码实例化模块

Mage::getModel('company_mymodulename/artwork');

看到company_mymodulename了吗? 这就是组名。 您希望它与您的配置匹配。 换句话说,这个

    <models>
         <MyModuleName>
             <class>Company_MyModuleName_Model</class>
             <resourceModel>MyModuleName_mysql4</resourceModel>
         </MyModuleName>
     </models>

应该是这个

    <models>
         <company_mymodulename>
             <class>Company_MyModuleName_Model</class>
             <resourceModel>company_mymodulename_mysql4</resourceModel>
         </company_mymodulename>
    </models>

其次,虽然技术上是合法的,但在模块和类名(MyModuleName)中使用混合大小写是一个坏主意。 自动加载器实现是区分大小写的,并且很容易稍微错误地命名某些内容而没有意识到。 坚持Leading_Word_Case_For_Mymodulename.