【发布时间】:2014-02-11 14:12:13
【问题描述】:
以下代码在我的FrontController 中。 run 方法应该调用属于给定 url 的控制器操作。例如http://localhost/admin/index 应该指向AdminController 和indexAction。
这已经有效,但是调用其他控制器操作的最佳方式是什么,例如用于构建我的网站导航的操作或带有一些信息的边栏(不在网站的主要部分)。每个请求都需要导航,所以实现起来没有问题,但是当我必须调用一些依赖于主要操作的操作时,如何构造它?
我的第一种方法是通过runBeforeMainController 或runAfterMainController 等两种方法调用其他控制器操作。全局配置包含主控制器的信息,在主控制器调用之前或之后需要调用哪些子控制器(动作)。
我的第二种方法是考虑挂钩/事件系统。但我没有找到好的理论解决方案。您对这种方法有什么提示或建议吗?
// in FrontController
public function run() {
$strController = static::getControllerNameFromUrl();
$strAction = static::getActionNameFromUrl();
// call actions before main controller
$this->template->main = $this->callMainControllerAction($strController, $strAction);
// call actions after main controller
}
【问题讨论】:
-
在 teresko 删除 mvc 标记之前发表评论。
-
为什么不从一些通用动作(即从一些基本控制器继承某些控制器)继承相应的动作?
-
@AlmaDo 然后我会有很多不同的 BaseController。我认为那不是一个好的架构。
-
为什么?做一个基本控制器,您将在其中处理导航。
-
@AlmaDo 是的,你是对的,但是当我有不同的子动作来调用不同的主要动作时?那么如何将子动作的模板输出放在主模板中的正确位置呢?
标签: php model-view-controller front-controller