网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

路由定義

注冊路由規則

路由注冊可以采用方法動態單個和批量注冊,也可以直接定義路由定義文件的方式進行集中注冊。

動態注冊

路由定義采用\think\Route類的rule方法注冊,通常是在應用的路由配置文件application/route.php進行注冊,格式是:

Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)');

例如注冊如下路由規則:

use think\Route;
// 注冊路由到index模塊的News控制器的read操作
Route::rule('new/:id','index/News/read');

我們訪問:

http://serverName/new/5

ThinkPHP5.0的路由規則定義是從根目錄開始,而不是基于模塊名的。

會自動路由到:

http://serverName/index/news/read/id/5

并且原來的訪問地址會自動失效。

路由表達式(第一個參數)支持定義命名標識,例如:

// 定義new路由命名標識
Route::rule(['new','new/:id'],'index/News/read');

注意,路由命名標識必須唯一,定義后可以用于URL的快速生成。

可以在rule方法中指定請求類型,不指定的話默認為任何請求類型,例如:

Route::rule('new/:id','News/update','POST');

表示定義的路由規則在POST請求下才有效。

請求類型包括:

類型 描述
GET GET請求
POST POST請求
PUT PUT請求
DELETE DELETE請求
* 任何請求類型

注意:請求類型參數必須大寫。

系統提供了為不同的請求類型定義路由規則的簡化方法,例如:

Route::get('new/:id','News/read'); // 定義GET請求路由規則
Route::post('new/:id','News/update'); // 定義POST請求路由規則
Route::put('new/:id','News/update'); // 定義PUT請求路由規則
Route::delete('new/:id','News/delete'); // 定義DELETE請求路由規則
Route::any('new/:id','News/read'); // 所有請求都支持的路由規則

如果要定義get和post請求支持的路由規則,也可以用:

Route::rule('new/:id','News/read','GET|POST');

我們也可以批量注冊路由規則,例如:

Route::rule(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
Route::get(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
Route::post(['new/:id'=>'News/update','blog/:name'=>'Blog/detail']);

注冊多個路由規則后,系統會依次遍歷注冊過的滿足請求類型的路由規則,一旦匹配到正確的路由規則后則開始調用控制器的操作方法,后續規則就不再檢測。

路由表達式

路由表達式統一使字符串定義,采用規則定義的方式。

正則路由定義功能已經廢除,改由變量規則定義完成。

規則表達式

規則表達式通常包含靜態地址和動態地址,或者兩種地址的結合,例如下面都屬于有效的規則表達式:

'/' => 'index', // 首頁訪問路由
'my'        =>  'Member/myinfo', // 靜態地址路由
'blog/:id'  =>  'Blog/read', // 靜態地址和動態地址結合
'new/:year/:month/:day'=>'News/read', // 靜態地址和動態地址結合
':user/:blog_id'=>'Blog/read',// 全動態地址

規則表達式的定義以/為參數分割符(無論你的PATH_INFO分隔符設置是什么,請確保在定義路由規則表達式的時候統一使用/進行URL參數分割)。

每個參數中以“:”開頭的參數都表示動態變量,并且會自動綁定到操作方法的對應參數。

可選定義

支持對路由參數的可選定義,例如:

'blog/:year/[:month]'=>'Blog/archive',

[:month]變量用[ ]包含起來后就表示該變量是路由匹配的可選變量。

以上定義路由規則后,下面的URL訪問地址都可以被正確的路由匹配:

http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12

采用可選變量定義后,之前需要定義兩個或者多個路由規則才能處理的情況可以合并為一個路由規則。

可選參數只能放到路由規則的最后,如果在中間使用了可選參數的話,后面的變量都會變成可選參數。

完全匹配

規則匹配檢測的時候只是對URL從頭開始匹配,只要URL地址包含了定義的路由規則就會匹配成功,如果希望完全匹配,可以在路由表達式最后使用$符號,例如:

'new/:cate$'=> 'News/category',
http://serverName/index.php/new/info

會匹配成功,而

http://serverName/index.php/new/info/2 

則不會匹配成功。

如果是采用

'new/:cate'=> 'News/category',

方式定義的話,則兩種方式的URL訪問都可以匹配成功。

如果你希望所有的路由定義都是完全匹配的話,可以直接配置

// 開啟路由定義的全局完全匹配
'route_complete_match'  =>  true,

當開啟全局完全匹配的時候,如果個別路由不需要使用完整匹配,可以添加路由參數覆蓋定義:

Route::rule('new/:id','News/read','GET|POST',['complete_match' => false]);

額外參數

在路由跳轉的時候支持額外傳入參數對(額外參數指的是不在URL里面的參數,隱式傳入需要的操作中,有時候能夠起到一定的安全防護作用,后面我們會提到)。例如:

'blog/:id'=>'blog/read?status=1&app_id=5',

上面的路由規則定義中額外參數的傳值方式都是等效的。statusapp_id參數都是URL里面不存在的,屬于隱式傳值,當然并不一定需要用到,只是在需要的時候可以使用。

文檔最后更新時間:2018-04-25 18:13:25

文檔
目錄

深色
模式

切換
寬度