標籤: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。