当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在ZendFramework中的不同模块中使用相同的模型?》经验,为你挑选了1个好方法。

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

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

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



1> Bill Karwin..:

我所做的是将公共类保存在模块层次结构之外的"库"目录中.然后设置我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/
. . .

在我的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()
    )
  )
);

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有