2012-01-25 152 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