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

前端之家收集整理的这篇文章主要介绍了php – 如何在Zend Framework中的不同模块中使用相同的模型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在一个现有项目中实施Zend Framework,该项目包含公共营销区域,私有成员区域,管理站点和营销活动管理站点.目前,这些组织结构很差,营销区域的控制器脚本和成员区域都位于站点的根目录下,然后是管理员的单独文件夹和营销活动站点的另一个文件夹.

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

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

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

edit: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()
    )
  )
);

您可以在引导程序中将“库”添加到路径中,但是您无法在引导程序中为正确的模块添加“models”目录,因为模块依赖于路由.有些人在他们的控制器的init()方法中执行此操作,有些人为ActionController的preDispatch挂钩编写插件来设置INCLUDE_PATH.

猜你在找的PHP相关文章