2010-10-20 58 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]; 
}