thinkphp學習筆記10—看不懂的路由規則

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   檔案   io   

路由這部分貌似在實際工作中沒有怎麼設計過,只是在用預設的設定,在手冊裡面看到部分,艱澀難懂。

 

1.路由定義

要使用路由功能需要支援PATH_INFO,PATH_INFO是什麼呢?手冊中提到“要使用路由功能,前提是你的URL支援PATH_INFO(或者相容URL模式也可以,採用普通URL模式的情況下不支援路由功能),” , url支援path_info,不是apache要支援path_info麼,度娘講的還算清楚一點,見下文:

pathinfo
(PHP 4 >= 4.0.3, PHP 5)
pathinfo -- 返迴文件路徑的資訊
說明
array pathinfo ( string path [, int options] )
pathinfo() 返回一個關聯陣列包含有 path 的資訊。包括以下的數組單元:dirname,basename 和 extension。
可以通過參數 options 指定要返回哪些單元。它們包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。預設是返回全部的單元。
例子 1. pathinfo() 例子
<?php
$path_parts = pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "\n";
echo $path_parts["basename"] . "\n";
echo $path_parts["extension"] . "\n";
?>
上例將輸出:
/www/htdocs
index.html
html

在我的機器上沒有輸出任何內容,我在php安裝目錄下找到php.ini開啟了cgi.fix_pathinfo=1,然後確實能夠輸出上面的內容。

但是這隻是講了一個函數的用法,就是pathinfo這個函數會返回一個數組,裡面有三個元素分別是

dirname:我的理解,伺服器名稱加上路徑,
basename:訪問的檔案名稱,
extension:檔案的副檔名

伺服器支援後還需要在設定檔中開啟相應的配置,

// 開啟路由‘URL_ROUTER_ON‘   => true, 

這個配置在ThinkPHP\Conf\convention.php檔案中也有定義,不過可以在模組的設定檔中覆蓋它。然後就是定義路由規則了,路由的匹配是按照先到先得的順序來進行的,在第一次匹配成功之後就不會再次匹配了,而是訪問這個路由中的控制器和方法,並傳入參數,得到結果。

路由規則定義的格式是:‘路由運算式‘=>‘路由地址和傳入參數‘ 或 array(‘路由運算式‘,‘路由地址‘,‘傳入參數‘)

路由運算式包含規則路由和正則路由

運算式      樣本
Regex /^blog\/(\d+)$/
規則運算式 blog/:id

 

路由地址表示當前路由運算式需要路由到的地址,包含內部地址和外部地址,並允許隱式傳入url裡面沒有的參數,允許使用字串或者數組的方式定義,特殊情況下可採用閉包函數定義路由功能,支援下面6中方式定義, 

定義方式 定義格式
方式1:路由到內部地址(字串) ‘[分組/模組/操作]?額外參數1=值1&額外參數2=值2...‘
方式2:路由到內部地址(數組)參數採用字串方式 array(‘[分組/模組/操作]‘,‘額外參數1=值1&額外參數2=值2...‘)
方式3:路由到內部地址(數組)參數採用數組方式 array(‘[分組/模組/操作]‘,array(‘額外參數1‘=>‘值1‘,‘額外參數2‘=>‘值2‘...)[,路由參數])
方式4:路由到外部地址(字串)301重新導向 ‘外部地址‘
方式5:路由到外部地址(數組)可以指定重新導向代碼 array(‘外部地址‘,‘重新導向代碼‘[,路由參數])
方式6:閉包函數 function($name){ echo ‘Hello,‘.$name;}

完全不懂啊!

路由以http或者/開頭的話會被認為是一個外部地址或者重新導向地址,例如

‘blog/:id‘=>‘/blog/read/id/:1‘ 採用301重新導向的方式路由跳轉,這種方式的好處是url可以比較隨意,包括在url裡面傳入更多的非標準格式參數,擦完全不懂的,非標準格式參數為何物?太tm專業了。

‘blog/:id‘=>‘blog/read‘:只支援模組和操作地址,例如我們希望avatar/123重新導向到/member/avatar/id/123_small只能使用‘avatar/:id‘=>‘/member/avatar/id/:1_small‘ 貌似:id代表一個參數,參數名字是id。路由地址採用重新導向地址的話,如果要引用動態變數,也是採用 :1、:2 的方式。採用重新導向到外部地址通常對網站改版後的URL遷移過程非常有用,例如:‘blog/:id‘=>‘http://blog.thinkphp.cn/read/:1‘ 表示當前網站(可能是http://thinkphp.cn)的 blog/123 地址會直接重新導向到 http://blog.thinkphp.cn/read/123

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.