ThinkPHP URL 路由功能詳解與執行個體

來源:互聯網
上載者:User

標籤:user   php   否則   status   位址解析   操作   開啟   think   使用   

本節內容導讀

本節內容主要介紹 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 代表永久重新導向。

ThinkPHP URL 路由功能詳解與執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.