gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:31:43 26 4
gpt4 key购买 nike

我正致力于在现有项目中实现 Zend Framework,该项目具有公共(public)营销区域、私有(private)成员区域、管理站点和营销事件管理站点。目前,营销区域和成员区域的 Controller 脚本都在站点的根目录下,然后是单独的管理员文件夹和营销事件站点的另一个文件夹。

在实现 Zend Framework 时,我想创建能够将 Controller 和 View 拆分为模块的功能(一个用于成员(member)区,一个用于公共(public)营销区,一个用于管理站点,一个用于营销事件管理站点),但我需要能够将每个模块指向相同的模型,因为所有三个组件都在相同的数据库和相同的业务对象上工作。

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

最佳答案

我所做的是将通用类保存在模块层次结构之外的“库”目录中。然后将我的 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。然后在每个 Controller 的 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”添加到 Bootstrap 中的路径,但不能为 Bootstrap 中的正确模块添加“models”目录,因为模块依赖于路由。有些人在他们的 Controller 的 init() 方法中这样做,有些人为 ActionController 的 preDispatch Hook 编写一个插件来设置 INCLUDE_PATH

关于php - Zend Framework 如何在不同的模块中使用相同的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com