与这个人非常相似,我试图按照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
.