我想把模型放在Zend框架的模块目录之外。准确地说,在/library文件夹
中library/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
代替
application/
modules/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
这样做是为了我不必为我创建的每个模块创建单独的模型。我需要改变哪些配置?如果你需要更多的细节,请问。
谢谢你
第一个答案有效,但如果你想在bootstrap中注册自动加载,我会给你另一个答案。
1)将'models'文件夹与所有Table.php文件放入库中。
每个模型/类都应该有:
class Model_Table extends Zend_Db_Table_Abstract{ ... }
在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();
如果你想为所有模块使用相同的模型,你可以把它放在应用程序文件夹applications/models
,这工作得很好,就像当你有一个没有模块的web。
但是如果你想在库中有模型,你可以把'models'文件夹放在你的库路径中并自动加载它。
- 在库中创建文件夹'Models',其中包含所有Table.php文件。
-
在configs/application.ini中输入:
autoloaderNamespaces.models = "Models_"
然后你可以在你的web应用程序中使用命名空间'Models_'
In controller:
$model = new Models_Table();
在任何情况下,我建议您将文件夹模型保存在路径application/models
zend自动加载器加载的类名称以前缀开头,即在其上注册。如果你的include路径中有一个库,你可以简单地注册"Models",就像自动加载器上的默认名称空间一样,并将你的类命名为Models_Actors_Actor。