在一个PHP MVC框架中,我该如何干净和优雅退出当前控制器/操作,但继续正常的脚本执行?PHP MVC:如何尽早退出Actions/Controllers?
例如,假设我的框架通常遵循这个纲要:
- 地图URL到控制器/动作
- 实例化控制器,调用动作(捕获输出)
- 做的东西
- 渲染视图
- 在操作结束时,继续正常操作
- 过程输出如有必要
- 输出发送到浏览器
现在,让我们说,我想阻止“正常”执行中“做的东西”步的地方,比方说,呈现了不同的看法,或做一个标题重定向,我想停止处理Action的其余部分,但继续进行“Process output”步骤
我该如何实现这个最佳方式?我唯一的想法是:
//in controller
protected function redirect($url) {
header("Location: $url");
exit();
}
但这完全跳过框架的执行的其余部分,并转储无论是在输出缓冲区直接发送到用户。一种替代方案:
//in dispatcher
call_user_func_array(array($controller,$action),$params);
afterwards:
...
//in controller
protected function redirect($url) {
header("Location: $url");
goto afterwards;
}
然而,这让我twitch和违背一切我已经学会了,特别是因为它引用的标签在另外的文件完全。
那么,有没有其他方法可以实现这一目标?
注意:重定向示例可能应该使用exit()
的方式,因为我们只是重定向到其他页面而不关心输出。我正在寻找一种通用解决方案。
+1用于缓冲Action的输出。 – 2010-06-28 15:52:03