2010-10-20 59 views
0

我是zend框架的新手。我在應用程序目錄中創建了「模型」文件夾。在模型文件夾中,我創建了一個類Application_Models_Albums,它擴展了Zend_Db_Table_AbstractZend Framework中的模型

現在,當我在IndexController中使用下面的代碼。我得到錯誤:

$albums = new Application_Models_Albums(); 
$this->view->albums = $albums->fetchAll();  

Error: Fatal error: Class 'Application_Models_Albums' not found in H:\Documents\IIS Server Root\localhost\learning\zf1\application\controllers\IndexController.php on line 13

請幫助。我如何在zend框架中加載模型?

回答

0

需要導入模型接收機類

require_once 'PathToModel\Application_Models_Albums.php'; 

,有些人是自動加載的類來解決這個問題,情況因人而異

+0

YMMV = ???你可以提供任何鏈接自動裝載機類教程 – 2010-10-20 22:03:10

+0

你的里程可能會改變......自從我工作在zend以來,一段時間,所以我沒有任何東西 - 嘗試使用require_once首先加載模型靜態。如果你能做到這一點,試試Zend自動加載器(在手冊中),並找出其他已經創建自動加載器的人 – automagic 2010-10-20 22:24:51

2

您需要的模式命名相冊。並保存在models/albums.php

自動加載器將找出從名稱加載它的位置。所以儘管該模型被命名爲albums,你怎麼稱呼它通過new Application_Models_Albums()

自動加載發現它在application/models/albums.php

同樣的Zend_Db_Table_Abstract類位於Zend/Db/Table/Abstract.php

編輯

如果你不能讓autoloader工作,只需將models/添加到您的包含路徑中即可快速輕鬆地完成此操作。我以前做過這個,它工作正常。

喜歡的東西set_include_path(get_include_path().PATH_SEPERATOR."models/")在你的index.php

+0

我的班級名稱是Application_Models_Albums,它位於application/models/albums.php中。但仍然出現錯誤。 – 2010-10-20 22:04:54

+0

查看自動加載器文檔。 http://framework.zend.com/manual/en/zend。loader.autoloader.html – 2010-10-20 22:06:10

0

這聽起來像你的Bootstrapapplication.ini需要指定命名空間爲'Application_'。

Bootstrap.php

protected function _initAutoloader() 
{ 
    $autoloader = new Zend_Application_Module_Autoloader(array(
     'basePath' => APPLICATION_PATH, 
     'namespace' => 'Kwis_', 
    )); 
    return $autoloader; 
} 

Alernatively,在configs/application.ini

appnamespace = "Application_" 
0

您還可以擴展Zend_Controller_Action並添加這樣的方法:

protected $_tables = array(); 

protected function _getTable($table) 
{ 
    if (false === array_key_exists($table, $this->_tables)) { 
     require_once(APPLICATION_PATH.'/modules/'.$this->_request->getModuleName().'/models/'.$table.'.php'); 
     $this->_tables[$table] = new $table(); 
    } 
    return $this->_tables[$table]; 
}