ThinkPHP URL 路由功能詳解與實例


本節內容導讀

本節內容主要介紹 ThinkPHP 路由功能與 U方法的使用,分為下面幾個部分:

  1. ThinkPHP URL 路由功能詳解:見本頁下面文字
  2. ThinkPHP 正則路由與實例
  3. ThinkPHP U方法:使用U方法自動生成URL超鏈接

ThinkPHP 3.0 版本的路由功能較 2.x 版本有較大的變更,如果您的版本是 2.x,請參閱下面的文檔:

  1. ThinkPHP 2.0 URL 路由(2.0版本適用)
  2. ThinkPHP 泛路由使用詳解(2.0版本適用)
  3. ThinkPHP 2.1 路由規則對比 2.0 的變更
  4. ThinkPHP U方法中使用路由的問題(bug)與解決辦法(2.0版本適用)

ThinkPHP URL 路由簡介

簡單的說,URL 路由就是允許你在一定規則下定制你需要的 URL 樣子,以達到美化 URL ,提高用戶體驗,也有益於搜索引擎收錄的目的。

例子

原本的 URL 為:

http://www.5idev.com/index.php/Products/Show/category/5/id/123

該 URL 的本意是顯示第 5 分類中 id 為 123 的產品。經過 URL 路由改寫后 URL 可以為:

http://www.5idev.com/index.php/product/5/123

如果使用 .htaccess 文件的 Rewrite 規則再把入口文件隱藏,則上面的 URL 可以進一步簡化為:

http://www.5idev.com/product/5/123

這個 URL 地址就相對比較簡單易容。

提示:使用 Apache 的 URL Rewrite 規則也能達到 URL 定制的功能,在此就不展開了,感興趣的請參看 Apache Rewrite 相關的文章。

ThinkPHP URL 路由配置

在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:

項目配置文件 Conf/config.php 里面開啟路由功能(設置為 true):

'URL_ROUTER_ON'	=> true,

路由規則定義

與 2.x 版本不同,3.0 路由規則定義於項目配置文件 config.php 內,格式為數組格式,具體定義規則又分為規則路由和正則路由。規則路由語法如下:

格式1:'路由規則'=>'[分組/模塊/操作]?額外參數1=值1&額外參數2=值2...'
格式2:'路由規則'=>array('[分組/模塊/操作]','額外參數1=值1&額外參數2=值2...') 
格式3:'路由規則'=>'外部地址'
格式4:'路由規則'=>array('外部地址','重定向代碼') 

語法說明

  1. 路由規則即是我們要在 URL 中顯示出來規則,后面元素值部分是實際的 URL 地址及參數
  2. 路由規則中如果以 : 開頭,表示動態變量,否則為靜態地址
  3. 格式2的額外參數可以傳入數組或者字符串
  4. 路由規則支持變量的數字約束定義,例如:'product/:id\d'=>'Products/Show'
  5. 路由規則非數字變量支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'
  6. 路由規則支持完整匹配定義,例如:'product/:id\d$'=>'Products/Show'
  7. 路由規則中的靜態地址部分不區分大小寫
  8. 外部地址中如果要引用動態變量, 采用 :1、:2 的方式
  9. 規則路由可以支持 全動態和動靜結合定義,例如 ':user/blog/:id'=>'Home/Blog/user'

這些規則及語法說明比較晦澀難懂,下面會有實例來對照以便理解上述路由規則及語法說明。

如果在配置文件里定義了路由開啟功能,系統在執行 Dispatch 解析的時候,會判斷當前 URL 是否存在定義的路由名稱,如果有就會按照定義的路由規則來進行 URL 解析。

ThinkPHP URL 路由實例

以本文開始的例子為例,看該路由是如何定義的。在項目配置文件 Conf/config.php 里定義如下規則:

//路由定義
'URL_ROUTE_RULES'=> array(
    'product/:category\d/:id\d'=>'Products/Show', //規則路由
),

當我們訪問如下這個地址的時候:

http://www.5idev.com/index.php/product/5/123

會將該地址解析到 Products 模塊的 Show 操作,並傳入 get 參數 category=5&id=123。

如果有額外的固定參數,如 status=1,可以定義路由:

'product/:category\d/:id\d'=>'Products/Show?status=1', //規則路由

也即匹配下面這個 URL 地址:

http://www.5idev.com/index.php/product/5/123/1

上面都是按格式1來定義的路由,在有額外參數的情況下,可以轉換為第2種定義格式:

'product/:category\d/:id\d'=>array('Products/Show','status=1') 

上面的路由規則中 \d 表示只匹配數字,當不加此約束時,則可匹配所有字符,這也是默認情況。如果要嚴格約定傳入的參數格式,請使用正則路由定義規則

路由格式:外部地址

對於路由格式 3 和格式 4,則是檢測到匹配的路由格式,則跳轉到外部地址,區別是格式 4 有重定向代碼,如 301 代表永久重定向。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM