PHP MVC:如何尽早退出动作/控制器?

Aus*_*yde 6 php model-view-controller

在PHP MVC框架,我怎么能干净优雅来自电流控制器/动作退出,而是继续正常执行脚本?

例如,假设我的框架通常遵循以下大纲:

  1. 将URL映射到Controller/Action
  2. 实例化Controller,调用Action(捕获输出)
    1. 做东西
    2. 渲染视图
    3. 在Action方法结束时,继续正常操作
  3. 必要时处理输出
  4. 将输出发送到浏览器

现在,让我们说,我想阻止"正常"执行中"做的东西"的步骤,比方说某个地方,呈现了不同的看法,或者做一个头重定向,我想停止处理动作的身体的其余部分,但继续进行"过程输出"步骤

我怎样才能以最好的方式实现这一目标?我唯一的想法是:

//in controller
protected function redirect($url) {
    header("Location: $url");
    exit();
}
Run Code Online (Sandbox Code Playgroud)

但这完全忽略了框架执行的其余部分,并将输出缓冲区中的任何内容直接转储给用户.替代:

//in dispatcher
call_user_func_array(array($controller,$action),$params);
afterwards:
...

//in controller
protected function redirect($url) {
    header("Location: $url");
    goto afterwards;
}
Run Code Online (Sandbox Code Playgroud)

然而,这使我抽搐,并违背一切我已经学会了,特别是因为它引用的标签在另外的文件完全.

那么,有没有其他方法来实现这一目标?

注意:重定向示例可能应该使用exit()方式,因为我们只是重定向到另一个页面而不关心输出.我正在寻找一种通用的解决方案.

Sco*_*ers 3

在您的 Action 方法中,您可以将所有输出收集在一个字符串中,而不是将其打印出来。仅在方法结束时将其打印出来。如果您需要重定向或退出,那么您还没有输出任何内容,您可以重定向或从该方法返回。