2012-08-13 46 views
1

我正在製作我的第一個zend應用程序,但我遇到了模塊自動加載的問題。 此時我加載了一個表格,保存在「用戶」窗體的「窗體」中,但是我收到了一個「致命錯誤」。 這是我的配置:zend 1.11.12 +模塊化結構+未找到'Users_Form_Login'類

的application.ini:

includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 


resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resouces.modules = "" 
resources.frontController.params.displayExceptions = 1 

;my library dir 
autoLoaderNameSpaces.test = "Test_" 

resources.view.helperPath.Zend_View_Helper = APPLICATION_PATH "/modules/default/views/helpers" 

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 
resources.layout.layout = layout 
resources.view.doctype = "HTML5" 

導演樹:

application 
-configs 
-layouts 
-modules 
--default 
--users 
---controllers 
----indexController.php -> class Users_IndexController extends Zend_Controller_Action 
---forms 
----Login.php -> class Users_Form_Login extends Zend_Form 
---models 
---views 
---Bootstrap.php -> class Users_Bootstrap extends Zend_Application_Module_Bootstrap{} 
--Bootstrap.php -> class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{} 

。 。 。

中的indexAction()我寫的Users_IndexController內:

$form = new Users_Form_Login(); 

而且我得到這個錯誤:

Fatal error: Class 'Users_Form_Login' not found in [...]/application/modules/users/controllers/IndexController.php on line 39 

編輯補

類內容@Tim噴泉:

Bootst說唱文件:

在bootstrap.php中:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initActionHelpers() 
     { 
      $config = $this->getOptions(); 
      $acl = new Test_Acl($config['acl']); 
      $aclHelper = new Test_Controller_Action_Helper_Acl(null, array('acl'=>$acl)); 
      Zend_Controller_Action_HelperBroker::addHelper($aclHelper); 

     } 
} 

在/Users/Bootstrap.php:

class Users_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

} 
+0

你是否在表單中聲明瞭類名? 'class Users_Form_Login extends Zend_Form {/ * ... * /}' – 2012-08-13 10:13:45

+0

是的,---- Login.php - > class Users_Form_Login擴展Zend_Form – inge 2012-08-13 11:50:48

回答

2

每個模塊都有一個引導文件。在用戶/ Bootstrap.php文件中,您是否爲該模塊聲明瞭名稱空間?

/** 
    * Sets up the autoloading for this module. This function must be first in the bootstrap else other bootstrap functions might not work. 
    */ 
    protected function _initAutoload() 
    { 
    $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Users_', 
      'basePath' => APPLICATION_PATH . "/modules/users", 
     )); 
    return $autoloader; 
    } 
+0

你輸入的速度更快:P – Karma 2012-08-13 10:21:22

+0

默認情況下,模塊引導程序會執行此操作。如果您使用自定義資源類型,則只需創建模塊自動加載器。 – 2012-08-13 11:08:47

+0

是的,但它沒有區別,因爲寫的tim – inge 2012-08-13 11:28:43

1

你的模塊白手起家沒有投放,因爲你有一個錯字在你的配置文件:

resouces.modules = "" 

應該

resources.modules = "" 

那麼它應該工作。

編輯:在這種情況下,第一步是查看引導程序是否正在運行。編輯您的modules/users/Bootstrap.php類和臨時添加的方法是這樣的:

protected function _initTest() 
{ 
    echo "User bootstrap run"; 
    exit; 
} 

在瀏覽器中重新載入頁面,你應該看到消息,如果引導程序正在運行。之後再將其刪除。如果是,請仔細檢查表單類的文件名和名稱(區分大小寫)。

+0

我刪除了字符寫下來,服務器是正確的,否則它工作正常( 錯誤仍然存​​在,我不知道該怎麼辦... – inge 2012-08-13 11:32:14

+0

資源.frontController.moduleDirectory = APPLICATION_PATH「/ modules」 resources.modules =「」 resources.frontController.params.displayExceptions = 1 – inge 2012-08-13 11:37:12

+0

添加了另一個測試,你可以對我的答案做些什麼 – 2012-08-13 11:39:54