路由作用
1.根據(jù)實現(xiàn)定義的路由規(guī)則,檢驗URL請求,確定執(zhí)行或者拒絕;
2.路由規(guī)則可自定義,隱藏了原URL地址,使訪問地址,使訪問更安全,地址更優(yōu)雅。
例如:http://tp5.com/edu/test/demo1和http://tp5.com/demo1
路由模式
開啟路由后,其實只有二中狀態(tài),要么全部URL請求都采用路由訪問,要么是有路由規(guī)則的用路由訪問,沒有的還是按照PATH_INFO規(guī)則訪問。
1.普通模式
配置:'url_route_on=>false
訪問:全部采用PATH_INFO格式
2.混合模式
配置:'url_route_on'=>true,'url_route_must'=>false,
已注冊用路由訪問,為注冊仍用PATH_INFO訪問
3.強制模式
配置:'url_route_on'=>true,'url_rote_must'=>false,
全部訪問必須采用路由模式,包括首頁'/'
路由注冊
1.動態(tài)方法:
Route:rule('路由規(guī)則','路由地址','請求類型',[路由參數(shù)],[變量規(guī)則]);
2.配置數(shù)組(配置文件方式):
return [
'路由規(guī)則'=>'路由地址',
'路由規(guī)則'=>['路由地址',[路由參數(shù)],[變量規(guī)則]]
];
路由規(guī)則
路由規(guī)則就是用戶最終用來訪問的URL地址,并非原始URL地址;
路由標識符/:變量名1/:變量名2/:[:可選變量名]
路由地址
路由地址,是用戶最終要訪問的URL,也是路由規(guī)則的目標,它不像路由規(guī)則,可以通過路由參數(shù)和變量規(guī)則進行檢驗,所以用戶一定要確保路由地址的有效性。
1.路由地址
路由地址,就是用戶用路由規(guī)則訪問頁面時,真實跳轉到的地址;
2.路由地址的種類
1)路由到:模塊/控制器/操作;
基本語法:Route::rule('路由規(guī)則','模塊/控制器/操作');
重點理解:
可訪問控制器:'url_controller_layer'=>'controller',
按從右到左的順序進行地址解析:操作->控制器->模塊,
支持額外參數(shù)(查詢方式):?變量名1=值1&變量名2=值2..
2)路由到:操作方法;
基本語法:Route::rule('路由規(guī)則','@模塊/控制器/操作');
重點理解:
跳過模塊初始化,直接執(zhí)行控制器中的方法;
模塊初始化:配置文件和公共文件;
調(diào)用試圖時必須設置完整模版文件的路徑。
3)路由到:類的方法(動態(tài)與靜態(tài))
基本語法:
Route::rule('路由規(guī)則','\完整命名空間\類名@動態(tài)操作');
Route::rule('路由規(guī)則','\完整命名空間\類名::靜態(tài)操作');
重點理解:
類必須創(chuàng)建在應用目錄或子目錄中;
靜態(tài)方法支持外部動態(tài)訪問,但建議在語法上分開;
為了項目規(guī)范,除非不得已,否者盡可能少用。
4)路由到:重定向地址(301)
基本語法:Route::rule('路由規(guī)則','重定向地址');
重點理解:
重定向地址:'/'或者'http://'開頭的外部地址;
'/':是以當前可訪問的Web目錄開始:如'public';
外部地址是301跳轉,適用與網(wǎng)站遷移。
5)路由到:閉包函數(shù)
基本語法:
Route::rule('路由規(guī)則',function([參數(shù)]){
//閉包函數(shù)
});
重點理解:
閉包即使函數(shù)中的函數(shù),或方法中的方法;
閉包函數(shù)可以接受通過路由規(guī)則傳過來的參數(shù);
不再執(zhí)行任何操作,相當于把方法直接定義在參數(shù)中。
路由參數(shù)
路由參數(shù)是用來檢測路由地址的,準確的講,是用來校驗除了路由變量之外額所有內(nèi)容。
1.路由參數(shù)
路由參數(shù)是用來驗證當前的路由規(guī)則是否有效的重要依據(jù);
2.路由參數(shù)的種類
1)請求類型:['method'=>'get|post'];
請求類型:最常用的是GET和POST,其它了解即可(如delete,put等);
使用方法:
如注冊方法已生命類型則無設置:Route::get()/post();
Route::rule()/any():['method'=>'get|post'];
使用路由配置文件數(shù)組定義:['method'=>'get|post'];
2)URL后綴:['ext'=>'html|shtml']/['deny_ext'=>'php'];
限定可訪問路由規(guī)則的URL后綴名稱,默認為html;
使用方法:
允許的URL后綴:['ext'=>'html|shtml'];
禁止的URL后綴:['deny_ext'=>'jpg|png'];
允許URL后綴為空:['ext'=>''];
禁止的URL后綴為空:['deny_ext'=>''];
3)回調(diào)函數(shù):['callback'=>'tp5.com'];
說明:回調(diào)函數(shù)返回true則路由規(guī)則有效,否者無效;
使用方法:
回調(diào)函數(shù)寫在應用公共方法中:common.php;
語法:['callback'=>'回調(diào)函數(shù)名稱'];
例如:用回調(diào)函數(shù)檢測是否存在某個應用配置項,來決定是否執(zhí)行路由規(guī)則。
4)域名檢測:['domain'=>'tp5.com'];
說明:檢測調(diào)用當前路由規(guī)則的域名是不是參數(shù)所指定的域名;
使用方法:
語法格式:['domain'=>'域名'];
支持子域名:['domain'=>'域名'];
5)更多參數(shù),如綁定模塊/合并額外參數(shù)等請查閱手冊。
變量規(guī)則
1.路由變量規(guī)則:
用來對動態(tài)路由規(guī)則中的變量部分,進行校驗的依據(jù)。
2.變量規(guī)則的使用域:
1 )局部變量規(guī)則:僅對當前路由有效
Route::rule('路由規(guī)則','路由地址','請求類型',['路由參數(shù)'],['變量規(guī)則']);
變臉規(guī)則:['動態(tài)變量1'=>'正則表達式1','動態(tài)變量2'=>'正則表達式2'];
例如:Route::rule('demo','index/demo','GET',[],['id'=>'\d{4}']);
2)全局變量規(guī)則:已注冊的全部路由規(guī)則都要遵守
單獨創(chuàng)建:Route::pattern('變量名','正則表達式');
批量創(chuàng)建:
Route::pattern([
'變量名1'=>'正則表達式1',
'變量名2'=>'正則表達式2',
]);
路由變量規(guī)則和路由規(guī)則可以寫在一起,以數(shù)組的形式。
3..正則表達式
描述字符串匹配模式,主要用于字符串的查找/替換與分割;
4.正則表達式有幾部分組成
四部分組成:定界符,院子,元字符和修正符。
定界符:通常用#,~~,/等非原子或元字符反斜杠\都行。
原子:需要匹配的字符,由可見與不可見字符組成;
元字符:限定或修飾原子部分,不能單獨使用;
修正符:限定或修飾整個正則表達式。
變量的規(guī)則是路由中的一個重點,也是保證路由規(guī)則安全的重要手段,當全局與局部的變量規(guī)則作用在同一個路由變量上面時,局部規(guī)則覆蓋全局規(guī)則,即局部的優(yōu)先級高于全局。
路由分組
路由分組,看上去很直觀,其實很抽象,它的高效云信,依賴于項目前期的科學規(guī)劃。
1.什么情況下,適合進行路由分組?
當多個路由規(guī)則中,由相同的路由前綴時,分組可以可以提高效率。
2.分組方法
動態(tài)方法:Route::group('分組名稱',[路由地址,[路由參數(shù)],[變量規(guī)則]]);
配置數(shù)組:return['規(guī)則'=>[路由地址,[路由參數(shù)],[變量規(guī)則]];
1)路由參數(shù)分類
閉包分組:
Route::group('',function(){
//創(chuàng)建路由規(guī)則語句
})
虛擬分組:根據(jù)相同路由參數(shù)進行分組
別名路由
1.快速注冊同一控制器下所有操作方法(不支持變量規(guī)則)
動態(tài)方法:Route::alias('規(guī)則名稱','模塊/控制器',[路由參數(shù)]);
靜態(tài)數(shù)組:
return[
'alias'=>['規(guī)則名稱','模塊/控制器',[路由參數(shù)]],
];
別名路由,可以進一步簡化路由規(guī)則,但是不支持變量規(guī)則,僅僅是縮短URL地址,使用請求地址更壞短小優(yōu)雅。借助路由參數(shù)中的allow和except參數(shù)實現(xiàn)黑白名單功能,比較有實際意義。
路由綁定
1.入口綁定
在入口文件中更添加:BIND_MODULE系統(tǒng)常量
//將當前訪問綁定模塊/控制器
define('BIND_MODULE','index');//模塊級
define('BIND_MODULE','index/demo');//控制器級
2.入口自動綁定
入口文件名與應用中的模塊自動綁定
1)入口自動綁定模塊設置:'auto_bind_module'=>true,
2)創(chuàng)建需要綁定的入口文件:列如:admin.php
3)創(chuàng)建與入口文件對應的模塊與控制器:application/admin/controller/Index.php,并創(chuàng)建默認index()方法
4)直接訪問:域名/admin.php,就會自動執(zhí)行admin模塊中默認控制器中的默認方法
3.動態(tài)綁定
語法:Route::bind('模塊[/控制器][/操作]');
1)綁定當前的URL到模塊
Route::bind('模塊]');
2)綁定當前的URL到模塊下面的控制器
Route::bind('模塊/控制器');
3)綁定當前的URL到模塊下面的控制器中的指定操作
Route::bind('模塊/控制器/操作');
4.綁定到命名空間或者類
1)綁定當前的URL到指定命名空間
Route::bind('app\index\controller','')
2)綁定當前的URL到類
ThinkPHP5路由(原文地址)
結束。
你們的支持也是我前進的動力,非常感謝支持!