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

时间:2011-11-22 11:58:51

标签: php models zend-framework

我想将模型放在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

这样做是为了不必为我创建的每个模块创建单独的模型。 我需要更改哪些配置? 如果您需要更多详细信息,请询问。

谢谢:)

3 个答案:

答案 0 :(得分:2)

如果您想为所有模块使用相同的模型,可以将它放在应用程序文件夹应用程序/模型中

并且工作正常,就像你没有模块的网页一样。

但是如果你想在库中有模型,你可以将'models'文件夹放在库路径中并自动加载它。

  1. 使用所有Table.php文件在库中创建文件夹'Models'。
  2. 在configs / application.ini中:

    autoloaderNamespaces.models = "Models_"
    
  3. 然后,您可以在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。