學習ThinkPHP必須理解的知識(二)——ThinkPHP路由

ThinkPHP支持URL路由功能,要啓用路由功能,須要設置ROUTER_ON 參數爲true。開啓路由功能後,系統會自動進行路由檢測,若是在路由定義裏面找到和當前URL匹配的路由名稱,就會進行路由解析和重定向。路由功能須要定義路由定義文件,位於項目的配置目錄下面,文件名爲routes.php,定義格式:php

PHP代碼瀏覽器

Return Array(spa

// 第一種方式 常規路由server

‘RouteName’=>array(‘模塊名稱’,'操做名稱’,'參數定義’,'額外參數’),blog

// 第二種方式 泛路由ci

‘RouteName@’=>array(路由

array(‘路由匹配正則’,'模塊名稱’,'操做名稱’,'參數定義’,'額外參數’),get

),it

)io

系統在執行Dispatch解析的時候,會判斷當前URL是否存在定義的路由名稱,若是有就會按照定義的路由規則來進行URL解析。例如,咱們啓用了路由功能,而且定義了下面的
一個路由規則:

PHP代碼

‘blog’=>array(‘Blog’,'index’,'year,month,day’,'userId=1&status=1′)

泛路由支持

新版引入了泛路由支持,提供了對同一個路由名稱的多個規則的支持,使得URL的設置更加靈活,例如,咱們對Blog路由名稱須要有多個規則的路由:

PHP代碼

‘Blog@’=>array(

array(‘/^\/(\d+)(\/p\/\d)?$/’,'Blog’,'read’,'id’),

array(‘/^\/(\d+)\/(\d+)/’,'Blog’,'archive’,'year,month’),

),

第一個路由規則表示解析 Blog/123 這樣的URL到Blog模塊的read操做

第二個路由規則表示解析 Blog/2007/08 這樣的URL到Blog模塊的archive操做

泛路由的定義難度就在路由正則的定義上面,其它參數和常規路由的使用一致。

舉個簡單路由的例子,若是咱們有一個City模塊,而咱們但願可以經過相似下面這樣的URL地址來訪問具體某個城市的操做:

http://serverName/index.php/City/shanghai/

shanghai這個操做方法是不存在的,咱們給相關的城市操做定義了一個city方法,以下:

PHP代碼

Class CityAction extends Action{

public function city(){

// 讀取城市名稱

$cityName = $_GET['name'];

echo (‘當前城市:’.$cityName);

}
}

接下來咱們來定義路由文件,實現相似於

http://serverName/index.php/City/shanghai/

這樣的解析,路由文件名稱是

PHP代碼

Return array(

‘City’=>array(‘City’,'city’,'name’);

);

這樣,URL裏面全部的City模塊都會被路由到City模塊的city操做,然後面的第二個參數會被解析成 $_GET[‘name’]

接下來,咱們就能夠在瀏覽器裏面輸入

http://serverName/index.php/City/beijing/

http://serverName/index.php/City/shanghai/

http://serverName/index.php/City/shenzhen/

會看到依次輸出的結果是:

當前城市:beijing

當前城市:shanghai

當前城市:shenzhen

相關文章
相關標籤/搜索