我正在一个现有项目中实施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.