Magento XML和实例化博客模型

时间:2014-04-08 00:42:39

标签: php magento

非常相似to this guy我试图关注Alan Storm的tutorial来实例化一个模型。我不太清楚为什么它不起作用。

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

  

"警告:include(Mage / Company / Mymodulename / Model / Artwork.php):无法打开流:没有这样的文件或目录"

但我一直无法显示类名(请参阅IndexController.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显示我的班级名称。

file: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);
    }
}

file:app / code / local / Company / MyModuleName / Model / Artwork.php

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

1 个答案:

答案 0 :(得分:1)

立即弹出两件事。首先,我假设您尝试使用看起来像这样的代码来实例化模块

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