thinkphp框架中,跳轉(zhuǎn)功能可以使用redirect方法來(lái)實(shí)現(xiàn)。因?yàn)樵摲椒ǘx在控制器基類中,所以控制器可以直接調(diào)用它來(lái)實(shí)現(xiàn)立即跳轉(zhuǎn)的功能。redirect方法接受兩個(gè)參數(shù):$url和$params。
其中,$url是重定向的URL地址。該參數(shù)可以是簡(jiǎn)單的字符串,也可以是數(shù)組或以#開(kāi)頭的錨點(diǎn)值。假若$Url參數(shù)是一個(gè)數(shù)組,其中可以包含路由規(guī)則別名、控制器名稱、操作名稱以及參數(shù)列表。即數(shù)組可以通過(guò)指定不同的元素,達(dá)到不同的跳轉(zhuǎn)效果。
$params是一個(gè)可選參數(shù),可用于指定附加到GET請(qǐng)求的參數(shù)。該參數(shù)只有在URL中沒(méi)有查詢字符串(即“?”)時(shí)才有效。如果URL已經(jīng)包含查詢字符串,那么$params將被忽略。
下面是一個(gè)使用redirect方法的示例:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
class?IndexController?extends?Controller { ????public?function?index() ????{ ????????//?直接跳轉(zhuǎn)到百度首頁(yè) ????????$this->redirect('http://www.baidu.com'); ????} ????public?function?test() ????{ ????????//?跳轉(zhuǎn)到當(dāng)前控制器Index操作中 ????????$this->redirect('Index/index'); ????????//?跳轉(zhuǎn)到Home控制器中的Index操作 ????????$this->redirect('Home/Index/index'); ????????//?跳轉(zhuǎn)并傳遞$name參數(shù) ????????$this->redirect('Index/index',?Array('name'?=>?'ThinkPHP')); ????????//?跳轉(zhuǎn)并傳遞多個(gè)參數(shù) ????????$this->redirect('Index/index',?array('name'?=>?'ThinkPHP',?'id'?=>?100)); ????} }
在上述代碼示例中,使用了redirect方法實(shí)現(xiàn)了多種跳轉(zhuǎn)功能。如 $this->redirect(‘http://www.baidu.com’); 就是直接跳轉(zhuǎn)到百度首頁(yè)的操作。 $this->redirect(‘Index/index’); 則是跳轉(zhuǎn)到當(dāng)前控制器Index操作中。 $this->redirect(‘Home/Index/index’); 指的是跳轉(zhuǎn)到Home控制器中的Index操作。 $this->redirect(‘Index/index’, array(‘name’ => ‘ThinkPHP’)); 則是跳轉(zhuǎn)并傳遞$name參數(shù)。 $this->redirect(‘Index/index’, array(‘name’ => ‘ThinkPHP’, ‘id’ => 100)); 是跳轉(zhuǎn)并傳遞多個(gè)參數(shù)。
除了將網(wǎng)頁(yè)重定向到指定URL,redirect方法也可以將其重定向到路由規(guī)則的別名。在這種情況下,$url參數(shù)應(yīng)該是一個(gè)路由別名,而不是URL地址。例如,假設(shè)我們有以下路由規(guī)則:
//?路由規(guī)則定義 'link/:id'?=>?'Links/link',
我們可以在控制器中使用路由規(guī)則別名“l(fā)ink”調(diào)用redirect方法,從而跳轉(zhuǎn)到鏈接頁(yè)面。例如:
class?LinksController?extends?Controller { ????public?function?link() ????{ ????????$id?=?I('get.id'); ????????$link?=?M('Links')->where(array('id'=>$id))->find(); ????????//?驗(yàn)證鏈接是否存在 ????????if?($link)?{ ????????????//?跳轉(zhuǎn)到重定義的路由規(guī)則上 ????????????$this->redirect('link/'.$id); ????????}?else?{ ????????????$this->error('鏈接不存在!'); ????????} ????} }
在上述代碼示例中,我們?cè)贚inks控制器的link方法中使用了重定向到重定義的路由規(guī)則別名的方法。 “$this->redirect(‘link/’.$id);” 使用了路由別名并傳遞了參數(shù),以跳轉(zhuǎn)到鏈接頁(yè)面。