我想将模型放在Zend Framework的模块目录之外。确切地说,在/ library文件夹中
library/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
INSTEAD OF
application/
modules/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
这样做是为了不必为我创建的每个模块创建单独的模型。 我需要更改哪些配置? 如果您需要更多详细信息,请询问。
谢谢:)
答案 0 :(得分:2)
如果您想为所有模块使用相同的模型,可以将它放在应用程序文件夹应用程序/模型中
并且工作正常,就像你没有模块的网页一样。
但是如果你想在库中有模型,你可以将'models'文件夹放在库路径中并自动加载它。
在configs / application.ini中:
autoloaderNamespaces.models = "Models_"
然后,您可以在Web应用程序中使用名称空间“Models_”
在控制器中:
$model = new Models_Table();
无论如何,我建议您将文件夹模型保留在路径application / models
中答案 1 :(得分:2)
第一个答案有效,但如果你想在bootstrap中注册自动加载,我会给你另一个答案。
1)将'models'文件夹放入包含所有Table.php文件的库中。
每个模特/班级都应该:
class Model_Table extends Zend_Db_Table_Abstract{ ... }
2)在bootstrap.php中输入:
protected function _initAutoLoad() {
// Add autoloader empty namespace
$autoLoader = Zend_Loader_Autoloader::getInstance();
$resourceLoader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
'resourceTypes' => array(
'model' => array(
'path' => '../library/models/',
'namespace' => 'Model_'
),
),
)
);
return $resourceLoader;
}
就是这样。现在,您可以在控制器中使用您的模型,如下所示:
$model = new Model_Table();
答案 2 :(得分:1)
zend autoloader loading class,其名称以prefix开头,并在其上注册。 如果您的包含路径中有库,则可以在自动加载器上简单地注册“模型”,例如默认命名空间,并将您的类命名为Models_Actors_Actor。