【问题标题】:MVC: How to run some custom dependant actions before/after main actionMVC:如何在主要操作之前/之后运行一些自定义相关操作
【发布时间】:2014-02-11 14:12:13
【问题描述】:

以下代码在我的FrontController 中。 run 方法应该调用属于给定 url 的控制器操作。例如http://localhost/admin/index 应该指向AdminControllerindexAction

这已经有效,但是调用其他控制器操作的最佳方式是什么,例如用于构建我的网站导航的操作或带有一些信息的边栏(不在网站的主要部分)。每个请求都需要导航,所以实现起来没有问题,但是当我必须调用一些依赖于主要操作的操作时,如何构造它?

我的第一种方法是通过runBeforeMainControllerrunAfterMainController 等两种方法调用其他控制器操作。全局配置包含主控制器的信息,在主控制器调用之前或之后需要调用哪些子控制器(动作)。

我的第二种方法是考虑挂钩/事件系统。但我没有找到好的理论解决方案。您对这种方法有什么提示或建议吗?

// 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


【解决方案1】:

我认为 HMVC 是您正在寻找的。 H代表分层。基本上你正在使用多个 mvc 结构。您的网站变得更加模块化,一个请求可能会导致不同的操作。

Afaik 已经有一些 PHP 框架使用这种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多