你在哪里保留“重定向”方法?

时间:2011-06-19 15:29:37

标签: php architecture

每次需要重定向到另一个网址时,调用header()然后die() [?]的重复性工作太多了。这就是为什么你可能有一个如下所示的函数/方法:

function redirect($url, $http_response_code = 302)
{
    header("Location: ".$url, true, $http_response_code);

    die;
}

此方法在您的项目/框架中的位置?

它不适合任何类别。无论我把它放在哪里,都感觉不对劲。 CodeIgniter(和Kohana)放在url助手类的内部但又感觉不对(以及site_url()base_url()等方法)。

4 个答案:

答案 0 :(得分:5)

我个人将它保存在响应类中(我有静态类,包含这样的辅助函数:redirect(),sendFile(),sendContent()等)。

如果你没有 - 那么你可能有请求类(处理请求的所有方面,例如isAjax(),isCLI(),isSecure(),getServerSoftware(), getClientIP()等)。它不适合这里100%,但接近一些。

答案 1 :(得分:4)

我认为这段代码太简单了,无法为它编写函数。

P.S。 我认为默认值应该是303或307。

答案 2 :(得分:3)

当然它应该在你的框架的Response类中。如果您使用(单个)前置控制器 - 我的情况 - 您在前端控制器中有这样的方法,因此可以从任何地方调用它。

更新: 您的前端控制器脚本处理所有请求(或大多数请求)。基本结构是:

<?
// include you libraries
// few common functions
// get the request parameters
// do some common work
// include specific scripts to perform job depending on Url
?>

例如,常见的工作与在一个地点,日志记录,数据库连接等中控制应用程序中所有URL的安全权限的能力有关。然后根据URL将详细工作委派给特定脚本。好的,在哪里放置重定向方法?如果将它放在脚本第一部分或常用函数中包含的任何公共库中,则它应该可用于之后调用的任何方法,特别是在处理特定URL的脚本中。希望这澄清。

我没有阅读所有细节,但此链接可能是help

答案 3 :(得分:1)

我通常将它和其他一些杂项函数放在我的include目录根目录中名为lib.phpmisc.php的文件中。它可能不是最明确的位置,但我总是在控制器中包含该文件,并附有解释它的内容。

编辑:

最终在我的文件中的一些其他方法是我发现自己经常使用的一些辅助函数,例如:

function def_value($arr, $k, $d = false){
    return array_key_exists($k,$arr) ? $arr[$k] : $d;
}

它们通常是我在我的框架中使用的非常通用的方法,但我不想在每个文件中都要求它们。有时我也会在我的Controller类中将重定向方法作为静态方法包含在内。