将模型放入Zend Framework的库目录中


Putting models in library directory in Zend Framework

我想把模型放在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'文件夹放在你的库路径中并自动加载它。

  1. 在库中创建文件夹'Models',其中包含所有Table.php文件。
  2. 在configs/application.ini中输入:

    autoloaderNamespaces.models = "Models_"
    

然后你可以在你的web应用程序中使用命名空间'Models_'

In controller:

    $model = new Models_Table();
在任何情况下,我建议您将文件夹模型保存在路径application/models

zend自动加载器加载的类名称以前缀开头,即在其上注册。如果你的include路径中有一个库,你可以简单地注册"Models",就像自动加载器上的默认名称空间一样,并将你的类命名为Models_Actors_Actor。