2012-01-25 87 views
0

我遇到了Zend_Framework的一个奇怪的问题,我不能从任何模块加载默认以外的窗体或模型。ZF没有自动加载模块和模块从模块

我的代码在我的控制器以下行(用户模块)

$myAccountModel = new User_Model_MyAccount(); 

但是我得到的是

Fatal error: Class 'User_Model_MyAccount' not found in F:\My Webs\freedate\application\modules\user\controllers\MyAccountController.php on line 13 

我检查了文件路径和类名错误并且都是正确的,我有这个项目设置类似于我以前完成的其他ZF项目,唯一的区别是这是在WAMP服务器上而不是在LAMP服务器上。

如果我尝试从默认模块加载模型或表单,它加载正常,这些代码行不会产生错误,并且类加载正常。

$loginForm = new Form_Login(); 
$loginModel = new Model_Login(); 

如果有人能提供一些线索来是怎么回事,这将是最有帮助的,因为我现在已经撞南墙!

我使用ZF 1.11.11 btw。

非常感谢

加里

[编辑]

这是definatly与ZF自动加载一万阿英,蒋达清,如果我添加以下行错误消失。

require_once(APPLICATION_PATH . '/modules/user/models/MyAccount.php'); 

在我的application.ini我有

; modules 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.modules[] = 

,在我的bootstrap.php我有

/** * Initialize autoloader 
* @return Zend_Loader_Autoloader 
*/  
protected function _initAutoload() {  
    return Zend_Loader_Autoloader::getInstance(); 
} 

/** * Initialize module autoloader 
* @return Zend_Application_Module_Autoloader 
*/ 
protected function _initModuleAutoload() { 
    $modelLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH . '/modules/default')); 

    return $modelLoader; 
} 

回答

2

你试过一个空Module_Bootstrap添加到特定模块?像这样:

<?php 

class User_Bootstrap extends Zend_Application_Module_Bootstrap 
{// nothing in here except you really want to do anything here ;)} 

一旦你这样做,你可以删除您自举_initAutoload()_initModuleAutoload()方法。当您创建模块引导程序时,Zend_Application_Module_Autoloader会默认为该模块创建。

请参阅The Module Resource Autoloader

+0

就是这样,我忘了将引导文件添加到模块。感谢你的救星。 – Garry

+0

当我删除整个应用程序因为无法找到我的ACL文件(致命错误:类'Model_FreedateAcl'找不到)而导致整个应用程序崩溃时,我能够从引导程序删除_initAutoload()而不是_initModuleAutoload()。 – Garry

+0

为了防止出现这种情况,您应该在application.ini文件中设置一个'appnamespace',并将所有不属于模块一部分的类作为前缀,因此它可能是'Application_Model_FreedateAcl'而不是'Model_FreedateAcl'。或者你可以像你一样设置一个没有命名空间的加载器。 – drew010