如何在Zend Framework中的不同模块中使用相同的模型?

Noa*_*ich 8 php model-view-controller zend-framework module

我正在一个现有项目中实施Zend Framework,该项目包括公共营销区域,私有成员区域,管理站点和营销活动管理站点.目前,这些组织结构不佳,营销区域的控制器脚本和成员区域都位于站点的根目录下,然后是管理员的单独文件夹和营销活动站点的另一个文件夹.

在实现Zend框架时,我想创建能够将控制器和视图拆分为模块(一个用于成员区域,一个用于公共营销区域,一个用于管理站点,一个用于营销活动管理站点)但我需要能够将每个模块指向同一个模型,因为所有三个组件都在同一个数据库和同一个业务对象上工作.

但是,我无法在文档中找到有关如何执行此操作的任何信息.任何人都可以帮助解决如何执行此操作的链接或如何完成它的一些简单说明?

Bil*_*win 9

我所做的是将公共类保存在模块层次结构之外的"库"目录中.然后设置我INCLUDE_PATH使用相应模块的"models"目录,以及常用的"library"目录.

docroot/
    index.php
application/
    library/    <-- common classes go here
    default/
        controllers/
        models/
        views/
    members/
        controllers/
        models/
        views/
    admin/
        controllers/
        models/
        views/
. . .
Run Code Online (Sandbox Code Playgroud)

在我的bootstrap脚本中,我将添加" application/library/" INCLUDE_PATH.然后在每个控制器的init()函数中,我将该模块的" models/"目录添加到INCLUDE_PATH.

编辑: 函数喜欢setControllerDirectory()setModuleDirectory()不添加相应的模型目录到INCLUDE_PATH.无论如何,你必须自己做.以下是如何执行此操作的一个示例:

$app = APPLICATION_HOME; // you should define this in your bootstrap
$d = DIRECTORY_SEPARATOR;
$module = $this->_request->getModuleName(); // available after routing
set_include_path(
  join(PATH_SEPARATOR,
    array(
      "$app{$d}library",
      "$app{$d}$module{$d}models",
      get_include_path()
    )
  )
);
Run Code Online (Sandbox Code Playgroud)

您可以library在引导程序中将" " 添加到路径中,但是您无法models在引导程序中为正确的模块添加" "目录,因为模块依赖于路由.有些人在init()他们的控制器的方法中这样做,有些人为ActionController的preDispatch钩子编写了一个插件来设置INCLUDE_PATH.