2011-11-22 56 views
3

我想在Zend Framework的模块目录之外放置模型。准确地说,在/库文件夹将模型放在Zend Framework的库目录中

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 

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

谢谢:)

回答

2

第一个答案有效,但如果您想在自举中注册自动加载,我会给你另一个答案。

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(); 
1

的Zend自动加载器加载类名称前缀开头,也就是它registred。 如果您的包含路径中有库,您可以在自动加载器上简单地注册“模型”(如默认名称空间),并将您的类命名为Models_Actors_Actor。

+0

你能解释一些代码片段吗? –

2

如果你想用同一型号的所有模块,你可以把它放在应用程序文件夹的应用程序/模型

和正常工作时,你有没有网络模块只喜欢。

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

  1. 使用所有Table.php文件将文件夹'Models'创建到库中。
  2. 在CONFIGS /的application.ini地说:

    autoloaderNamespaces.models = "Models_" 
    

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

在控制器:

$model = new Models_Table(); 

任何案例中,我建议您将文件夹模型保留在路径应用程序/模型中

相关问题