1. 程式人生 > >thinkPHP跳轉方法及重定向

thinkPHP跳轉方法及重定向

在thinkPHP中,跳轉頁面的實現由success和error方法實現,操作成功時用success方法,失敗則使用error方法。且他們兩者均支援ajax提交。
使用方法舉例:

$User = M('User');//例項化User物件
$result = $User->add($data);
if($result){
    //條件成立時跳轉
    $this->success('操作成功','/User/index');
}else{
    //條件不成立時的跳轉
    $this->error('操作失敗');
}

success、error方法

他們分別有三個引數,第一個引數代表提示資訊,第二個引數表示跳轉地址,第三個引數是跳轉是件(單位:秒),例:

//操作完成3秒後跳轉到/Article/index
$this->success('操作成功','/Article/index',3);

//操作失敗5秒後跳轉到/Article/error
$this->error('操作失敗','/Article/error',5);

注:跳轉地址是可選引數,success方法預設的跳轉地址是$_SERVER[‘HTTP_REFERER’],error方法的預設跳轉地址是javascript:history.back(-1);
跳轉時間也是可選的,預設success方法是1s,error方法是3s。

重定向

Controller類的redirect方法可以實現頁面的重定向功能。
redirect方法的引數用法和U函式的用法一直,例:

//重定向到New模組的Category操作
$this->redirect("New/category',array('cate_id'=>2),5,'頁面跳轉中...');

說明:上面的用法表示5秒後跳轉到New模組的category操作,並且顯示‘頁面跳轉中…’字樣,重定向後會改變當前的額URL地址。
如果僅僅是想重定向到一個指定的URL地址而不是到某個模組的操作方法,可以直接時用下面的額redirect函式重定向:

//重定向到指定的URL地址
redirect('/New/category/cate_id/2',5,'頁面跳轉中...');

redirect函式的第一個引數是URL地址。
注:redirect方法和redirct函式的區別在於前者是用URL規則定義跳轉,後者是一個純粹的URL地址。
thinkPHP可以很好的支援AJAX請求,在系統的\Think\Controller提供了ajaxReturn方法泳衣AJAX呼叫後返回資料給客戶端。並且支援JSON、JSONP、XML和EVAL四種方式給客戶端接收資料,並且支援配置其他方式的資料格式返回。
ajaxReturn方法呼叫示例(返回單個數據):

$data = 'ok';
$this->ajaxReturn($data);

ajaxReturn返回陣列:

$data['status']=1;
$data['content']='content';
$this->ajaxReturn($data);

ajaxReturn預設配置採用JSON格式返回資料(通過配置DEFAULT_AJAX_RETURN進行設定),我們可以指定格式返回,例:

//指定XML格式返回資料
$data['status']=1;
$data['content']='content';
$this->ajaxReturn($data,'xml');

獲取變數

I方法是thinkPHP用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,格式:

I('變數型別.變數名/修飾符',['預設值' ], ['過濾方法或正則'], ['額外資料來源']);

變數型別:指請求方式或者輸入型別,包括:

變數型別含義
get獲取GET引數
post獲取POST引數
param自動判斷請求型別獲取GET、POST、或者PUT引數
request獲取REQUEST引數
put獲取PUT引數
session獲取$_SESSION引數
cookie獲取$_COOKIE引數
server獲取$_SERVER引數
globals獲取$GLOBALS引數
path獲取PATHINFO模式的URL引數
data獲取其他型別的引數,需要配合額外資料來源引數

注意:變數型別不區分大小寫,變數名則嚴格區分大小寫。預設值和過濾方法均屬於可選引數。
舉例說明:

echo I('get.id'); //相當於$_GET['id']
echo I('get.id', 0); //I方法支援的預設值,即當get.id不存在的時候,返回預設值0

echo I('get.name', '', 'htmlspecialchars'); //採用htmlspecialchars對$_GET['name']進行過濾,如果不存在則返回空字串

echo I('get.'); //直接獲取整個變數型別

I('post.name', '', 'htmlspecialchars');  //採用htmlspecialchars方法對$_POST['name']進行過濾,如果不存在則返回空字串
I('session.user_id',0); //獲取$_SESSION['user_id'],不存在時返回預設值0
I('cookie.'); //獲取整個$_COOKIE陣列
I('server.REQUET_METHOD');  //獲取$_SERVER['REQUEST_METHOD']

變數修飾符:

最新版本的I函式支援對變數使用修飾符功能,可以更方便的通過型別過濾變數,例子:

I('get.id/d'); //強制變數為整形
I('get.ids/a'); //強制變數為陣列型別

可以使用的修飾符包括:

修飾符作用
s強制轉換為字串型別
d強制轉換為整型型別
b強制轉換為布林型別
a強制轉換為陣列型別
f強制轉換為浮點型別

過濾方法或正則:

如果沒有在呼叫函式的時候指定過濾演算法的話,系統會採用預設的過濾機制(由DEFAULT_FILTER配置),事實上,該引數的預設設定是:

//系統預設的變數過濾機制
'DEFAULT_FILTER'    =>'htmlspecialchars

也就是說,I方法的所有獲取變數如果沒有設定變數過濾方法的話都會進行htmlspecialchars進行過濾,那麼:

I('get.name'); //等同於htmlspecialchars($_GET['name']);

預設過濾機制也可以有多個值:

'DEFAULT_FILTER'    =>'strip_tags,htmlspecialcars'

注:如果在使用I方法的時候指定過濾方法,那麼就會忽略DEFAULT_FILTER的設定。
例:

//對$_POST['email']進行格式驗證,不符合要求時返回空字串
I('post.email', '', filter_validate_email);

過濾方法名稱必須是filter_list方法中的有效值(不同伺服器環境可能有所不同),可能支援的值如下:

  • filter_int
  • filter_boolean
  • filter_validate_regexp
  • filter_validate_email
  • filter_validate_ip
  • filter_string
  • filter_stripped
  • filter_encoded
  • filter_special_chars
  • filter_unsafe_raw
  • filter_email
  • filter_url
  • filter_number_int
  • filter_number_float
  • filter_magic_quotes
  • filter_callback

注:在一些特殊情況下,我們不希望進行任何過濾,可以將過濾方法值為空或false,此時系統就不會再進行任何形式的過濾了。