Home > Article > Backend Development > TP框架的 redirect方法是如何实现跳转的?一看源码,完全不能理解啊
protected function redirect($url,$params=array(),$delay=0,$msg='') {
$url = U($url,$params);
redirect($url,$delay,$msg);
}
先生存一个url,然后递归传入第三第四个参数。。
它的跳转到底是怎么实现的???
那你去看一下 redirect 函数的定义呀
函数体内的redirect 是调用了一个函数:
参见 框架内置的functions.php文件
redirect
说明:
void redirect($url, $time=0, $msg='')
URL重定向
源码:
function redirect($url, $time=0, $msg='') { //多行URL地址支持 $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if (!headers_sent()) { // redirect if (0 === $time) { header('Location: ' . $url); } else { header("refresh:{$time};url={$url}"); echo($msg); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if ($time != 0) $str .= $msg; exit($str); } }
// URL重定向function redirect($url, $time=0, $msg='') { //多行URL地址支持 $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if (!headers_sent()) { //如果标头没有发出 // redirect if (0 === $time) { header('Location: ' . $url); //如果没有指定延时时间,则发一个跳转标头 } else { header("refresh:{$time};url={$url}");//如果制定了延时时间,则发一个延时刷新的标头 echo($msg); } exit(); } else { //否则就发送 meta 标记,含义同上 $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if ($time != 0) $str .= $msg; exit($str); }}