# 快速入門(十四):頁面跳轉和重定向
本章內容講解了如何在ThinkPHP中使用頁面跳轉和重定向功能。
## 頁面跳轉
系統的`Think\Controller`類內置了兩個頁面跳轉方法error和success,分別用于錯誤(提示)跳轉和成功(提示)跳轉。兩個方法都會輸出一個提示信息頁面,然后自動跳轉到指定的地址。下面是一個簡單的例子:
~~~
$New = M('New'); //實例化New對象
$result = $New->add($data);
if($result){
// 成功后跳轉到新聞列表頁面
$this->success('新增成功,即將返回列表頁面', '/New/index');
} else {
// 錯誤頁面的默認跳轉頁面是返回前一頁,通常不需要設置
$this->error('新增失敗');
}
~~~
success和error方法有三個參數,分別是提示信息、跳轉地址和跳轉頁面等待時間(秒),除了第一個參數外其他都是可選的。
**提示信息**:成功或者錯誤信息字符串。
**跳轉地址**:頁面跳轉地址是可選的,success方法的默認跳轉地址是`$_SERVER["HTTP_REFERER"]`,error方法的默認跳轉地址是`javascript:history.back(-1);`。
**等待時間**:默認的等待時間success方法是1秒,error方法是3秒。
success和error方法都可以對應的模板,默認兩個方法對應的模板是框架自帶的跳轉模板dispatch_jump.tpl:
~~~
//默認錯誤跳轉對應的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
//默認成功跳轉對應的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
~~~
success方法默認頁面顯示如下:

error方法默認頁面顯示如下:

你可以重新定義跳轉模板,通常建議直接放到項目目錄下面(下面采用公共模塊的模板作為項目統一的跳轉模板):
~~~
//默認錯誤跳轉對應的模板文件
'TMPL_ACTION_ERROR' => 'Common@Public/error',
//默認成功跳轉對應的模板文件
'TMPL_ACTION_SUCCESS' => 'Common@Public/success',
~~~
模板文件可以使用模板標簽,并且可以使用下面的模板變量:
| 變量 | 含義 |
|-----|-----|
| $message | 頁面成功提示信息 |
| $error| 頁面錯誤提示信息 |
| $waitSecond | 跳轉等待時間 單位為秒 |
| $jumpUrl | 跳轉頁面地址 |
## 重定向
如果不需要提示頁面,ThinkPHP還可以實現直接重定向操作,`Think\Controller`類提供了redirect方法實現頁面的重定向功能。
### 重定向到操作
~~~
redirect('重定向操作地址(一般為[控制器/操作])','參數(字符串或者數組)','重定向等待時間(秒)','重定向提示信息')
~~~
例如:
~~~
$New = M('New'); //實例化New對象
$result = $New->add($data);
if($result){
// 停留5秒后跳轉到New模塊的category操作,并且顯示頁面跳轉中字樣
$this->redirect('New/category', 'cate_id=2&status=1', 5,'頁面跳轉中...');
} else {
// 錯誤頁面
$this->redirect('New/error');
}
~~~
可以傳入參數和設置重定向的等待時間,甚至給出等待的提示信息:
> 注意:重定向后會改變當前的URL地址。
### 重定向到URL
如果你僅僅是想重定向要一個指定的URL地址,而不是到控制器的操作方法,可以直接使用redirect函數重定向,例如:
~~~
$New = M('New'); //實例化New對象
$result = $New->add($data);
if($result){
//重定向到指定的URL地址
redirect('/New/category/cate_id/2', 5, '頁面跳轉中...');
}
~~~
> redirect函數的第一個參數是要跳轉的實際URL地址。