Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 你把“你的”放在哪里;重定向";方法?_Php_Architecture - Fatal编程技术网

Php 你把“你的”放在哪里;重定向";方法?

Php 你把“你的”放在哪里;重定向";方法?,php,architecture,Php,Architecture,这是太多的重复性工作调用,然后每次你需要重定向到另一个URL。这就是为什么您可能有一个如下所示的函数/方法: function redirect($url, $http_response_code = 302) { header("Location: ".$url, true, $http_response_code); die; } 此方法在您的项目/框架中位于何处 它不属于任何类别。不管我把它放在哪里,感觉都不对。CodeIgniter(和Kohana)放在urlhelp

这是太多的重复性工作调用,然后每次你需要重定向到另一个URL。这就是为什么您可能有一个如下所示的函数/方法:

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

    die;
}
此方法在您的项目/框架中位于何处


它不属于任何类别。不管我把它放在哪里,感觉都不对。CodeIgniter(和Kohana)放在
url
helper类中,但同样,它感觉不对(还有
site\u url()
base\u url()等方法).

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

编辑:

对于我来说,该文件中的其他一些方法是我发现自己经常使用的一些辅助函数,例如:

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

它们通常是我在框架中使用的非常通用的方法,但我不想在每个文件中都需要它们。偶尔,我也会将重定向方法作为静态方法包含在我的
控制器
类中。

当然,它应该在框架的响应类中。如果您使用一个(单个)前端控制器(我的例子),那么前端控制器中就有这样的方法,因此可以从任何地方调用它

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

<?
// 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的脚本中。希望这能澄清


我还没有阅读所有的细节,但是这个链接可能会。我个人把它保存在一个响应类中(我有一个静态类,包含如下帮助函数:redirect()、sendFile()、sendContent()等)


如果没有,则可能有请求类(处理请求的所有方面,例如isAjax()、isCLI()、isSecure()、getServerSoftware()、getClientIP()等)。它不是100%适合这里,而是非常接近。

在我看来,这段代码太简单,无法为它编写函数

附言。
我认为默认值应该是303或307。

该文件中还有哪些其他函数?这是一个helper类(仅包含静态方法的类)?您开发了这些类还是它们是公共可用框架/库的一部分?在我的情况下,这些是我自己的类(我看了很多框架,研究它们是如何工作的,等等,这些都是我实际使用的有用函数的汇编(我自己编写或根据我的需要采用,而不仅仅是复制粘贴))。但我认为Kohana(不记得是哪个版本)和/或Yii有这样的独立类。
sendContent()
do?sendContent()和sendFile()类似;它们都发送可下载的内容(如PDF、XLS或CSV文件),以便在用户端浏览器上请求/将文件保存在磁盘上,而不是直接在浏览器中打开。在生成PDF发票、Excel格式的订单历史记录等时非常有用。2种方法:一种发送您在脚本中生成的数据(您提供适当的mime类型、文件名等),而second发送已经存在的文件(可能根据文件扩展名等检测/猜测mime类型)。它们在我的实现中非常简单--我在其他地方看到了更高级的实现。代码很简单,但它的作用很重要,允许错误可能是一个严重的问题(即在header()之后省略die().另一方面。这段代码非常重要,非常特别,不应该隐藏在任何抽象层中。嗯,它应该在没有
die()
exit()
的情况下工作。