1. 程式人生 > >thinkphp之URL,跳轉和重定向

thinkphp之URL,跳轉和重定向

以下是專案所接觸到的知識,根據ThinkPHP3.1.2完全開發手冊總結。

一.URL(注意:模組首字母必須大寫,分組名如果是大寫資料夾名也要大寫,在linux上對大小寫特別敏感,而wamp不會,之前上傳到伺服器搞死我)

1.URL模式,在config.php配置


URL_MODEL 為0:
採用傳統的URL引數模式:

http://serverName/appName/?m=module&a=action&id=1

URL_MODEL 為1:

使用PATHINFO模式,預設就是這種模式:

http://serverName/appName/module/action/id/1/

在不考慮路由的情況下,第一個引數會被解析成模組名稱(如果啟用了分組的話,則依次往後遞推),第二個引數會被解析成操作,後面的引數是顯式傳遞的,而且必須成對出現,例如:
http://serverName/appName/module/action/year/2008/month/09/day/21/
其中引數之間的分割符號由URL_PATHINFO_DEPR引數設定,預設為”/”,例如我們設定URL_PATHINFO_DEPR為“-”的話,就可以使用下面的URL訪問:
http://serverName/appName/module-action-id-1/
URL_MODEL 為2

該URL模式和PATHINFO模式功能一樣,除了可以不需要在URL裡面寫入口檔案,和可以定義.htaccess 檔案外。在開啟了Apache的URL_REWRITE模組後,就可以啟用REWRITE模式了,具體參考下面的URL重寫部分。

URL_MODEL 為3

相容模式是普通模式和PATHINFO模式的結合,並且可以讓應用在需要的時候直接切換到PATHINFO模式而不需要更改模板和程式,還可以和URL_WRITE模式整合。相容模式URL可以支援任何的執行環境。
相容模式的效果是可以解析以下url:

http://serverName/appName/?s=/module/action/id/1/

二.URL生成

為了配合所使用的URL模式,我們需要能夠動態的根據當前的URL設定生成對應的URL地址,為此,ThinkPHP內建提供了U方法,用於URL的動態生成,可以確保專案在移植過程中不受環境的影響。
U方法的定義規則如下(方括號內參數根據實際應用決定):

U('[分組/模組/操作]?引數' [,'引數','偽靜態字尾','是否跳轉','顯示域名'])

下面是一些簡單的例子:
U('User/add') // 生成User模組的add操作的URL地址
U('Blog/read?id=1') // 生成Blog模組的read操作 並且id為1的URL地址
U('Admin/User/select') // 生成Admin分組的User模組的select操作的URL地址

U方法的第二個引數支援陣列和字串兩種定義方式,如果只是字串方式的引數可以在第一個引數中定義,例如:
U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')

三.頁面跳轉:

1. $this->success('新增成功''User/list');

2.$this->error('新增失敗');

Success和error方法都有對應的模板,並且是可以設定的,預設的設定是兩個方法對應的模板都是:

//預設錯誤跳轉對應的模板檔案
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
//預設成功跳轉對應的模板檔案
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
也可以使用專案內部的模板檔案
//預設錯誤跳轉對應的模板檔案
'TMPL_ACTION_ERROR' => 'Public:error';
//預設成功跳轉對應的模板檔案
'TMPL_ACTION_SUCCESS' => 'Public:success';
success和error方法會自動判斷當前請求是否屬於Ajax請求,如果屬於Ajax請求則會呼叫ajaxReturn方法返回資訊,具體可以參考後面的AJAX返回部分。3.1版本開始,error和success方法支援傳值,無論是跳轉模板方式還是ajax方式 都可以使用assign方式傳參。例如:
$this->assign('var1','value1');
$this->assign('var2','value2');
$this->error('錯誤的引數','要跳轉的URL地址');
當正常方式提交的時候,var1和var2變數會賦值到錯誤模板的模板變數。
當採用AJAX方式提交的時候,會自動呼叫ajaxReturn方法傳值過去(包括跳轉的URL地址url和狀態值status)

四.重定向

Action類的redirect方法可以實現頁面的重定向功能。
redirect方法的引數用法和U函式的用法一致(參考上面的URL生成部分),例如:

//重定向到New模組的Category操作
$this->redirect('New/category', array('cate_id' => 2), 5, '頁面跳轉中...');
上面的用法是停留5秒後跳轉到News模組的category操作,並且顯示頁面跳轉中字樣,重定向後會改變當前的URL地址,Redirect方法的第一個引數是一個URL地址。