thinkphp5框架路由原理與用法詳解
本文實(shí)例講述了thinkphp5框架路由原理與用法。分享給大家供大家參考,具體如下:
路由理解
概括的說:路由就是網(wǎng)絡(luò)請求的url與thinkphp應(yīng)用層的邏輯處理地址的對應(yīng)關(guān)系。
通俗的說:路由就是把url的請求優(yōu)雅的對應(yīng)到你想要執(zhí)行的操作方法。
路由其實(shí)就是把真實(shí)的url地址隱藏起來,使用訪問地址來訪問應(yīng)用(網(wǎng)站或OA等)。
通常這樣定義:“訪問地址”=》“真實(shí)地址”,這代表了一種映射關(guān)系。就好比用“1”代表去肯德基吃飯,用“0”代表去麥當(dāng)勞吃飯,你預(yù)先告知過同事這個規(guī)則的話,只需要發(fā)送“1”或“0”給同事,同事就能理解要去哪里吃飯,一個道理。
路由的規(guī)則是thinkphp規(guī)定好的,比如TP的訪問規(guī)則是:根目錄/模塊/控制器/方法,那么我們只需要定義一下映射關(guān)系“reg”=》“index/user/reg”,此時只需要再瀏覽器輸入“域名/reg”就能訪問“index模塊/user/控制器/reg方法”這個地址了。
這樣的優(yōu)點(diǎn):
1、沒有處理過的url路徑都是由 ...模塊/控制器/方法/參數(shù) 構(gòu)成,如果不加以“掩飾”的話,會被別人看清內(nèi)部結(jié)構(gòu),不夠安全。
2、可以讓url地址更加簡潔、優(yōu)雅、美觀。
定義
通常是在應(yīng)用的路由配置文件application/route.php進(jìn)行注冊。

注冊
- 2種注冊方式:1路由動態(tài)注冊和2配置定義的方式

- 配置定義的方式
其中,__pattern__是指定義全局變量規(guī)則,

對應(yīng)Route.php中:

路由分組
這個功能允許把相同前綴的路由定義合并分組,
示例一:

admin/Admin/test方法:
public function test()
{
echo 'i am test <br>';
print_r(input());
}
示例如下(注意接收的參數(shù)):


示例二:
關(guān)于定義路由后,url的生成:url()方法里,url('index/blog/read','id=5&name=thinkphp');模塊、控制器要寫全,不然會出錯。例如:
Route::group('show', [
'page/:id' => ['index/Page/show'],
'cate/:id' => ['index/Cate/show'],
], ['method' => 'get'], ['id' => '\d+']);
<a href="{:url('Page/show',['id'=>$cate['id']])}" rel="external nofollow" >
Href生成=》http://cms.com/index/page/show/id/65.html
動態(tài)注冊:
Route::rule('路由表達(dá)式','路由地址','請求類型','路由參數(shù)(數(shù)組)','變量規(guī)則(數(shù)組)');
或者簡化方法:
Route:: get(路由規(guī)則, 路由地址, 路由參數(shù), 變量規(guī)則)
批量注冊:
Route::rule([ '路由規(guī)則1'=>'路由地址和參數(shù)', '路由規(guī)則2'=>['路由地址和參數(shù)','路由參數(shù)(數(shù)組)','變量規(guī)則(數(shù)組)'] ... ],'','請求類型','匹配參數(shù)(數(shù)組)','變量規(guī)則');
注意:
-
混合模式下,注冊路由后,原來的訪問地址會自動失效~
-
每個參數(shù)中以“:”開頭的參數(shù)都表示動態(tài)變量,并且會自動綁定到操作方法的對應(yīng)參數(shù)。
-
注冊多個路由規(guī)則后,系統(tǒng)會依次遍歷注冊過的滿足請求類型的路由規(guī)則,一旦匹配到正確的路由規(guī)則后則開始調(diào)用控制器的操作方法,后續(xù)規(guī)則就不再檢測。
路由綁定
入口文件綁定模塊后,再定義路由規(guī)則,就不需要加模塊名稱了。
// [ 應(yīng)用入口文件 ]
//綁定admin模塊
define('BIND_MODULE', 'admin');
// 給登錄url定義路由
Route::rule('login', 'Login/index');
注意: define(‘BIND_MODULE', ‘index/index');綁定到控制器時,控制器名稱index要小寫,大寫會post不成功。。。
關(guān)于路由到動態(tài)的模塊、控制器或者操作
'show/:action/:id' => ['index/:action/show', ['method' => 'get'], ['id' => '\d+', 'action' => '\w+']],
這兩個都能訪問成功??wtf?why?
http://cms.com/show/page/69 http://cms.com/index/page/show/id/69.html
明白一點(diǎn)了,不能這樣寫,可選參數(shù)只能放到路由規(guī)則的最后,如果在中間使用了可選參數(shù)的話,后面的變量都會變成可選參數(shù)。
路由別名
似乎使用路由別名后,原pathinfo并不會失效~
小結(jié)
- url()助手函數(shù)里,模塊/控制器/方法要寫全;
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP實(shí)現(xiàn)微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解
本篇文章給大家介紹PHP實(shí)現(xiàn)微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解,使用了微信官方給的php版本的sdk,但是在使用過程中有很多問題,今天給大家講講不集成支付SDK直接調(diào)用支付接口實(shí)現(xiàn)支付和退款,感興趣的朋友一起看看吧2018-03-03
php打亂數(shù)組二維數(shù)組多維數(shù)組的簡單實(shí)例
下面小編就為大家?guī)硪黄猵hp打亂數(shù)組二維數(shù)組多維數(shù)組的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
php 微信公眾平臺開發(fā)模式實(shí)現(xiàn)多客服的實(shí)例代碼
這篇文章主要介紹了php 微信公眾平臺開發(fā)模式實(shí)現(xiàn)多客服的實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-11-11
PHP設(shè)置圖片文件上傳大小的具體實(shí)現(xiàn)方法
PHP默認(rèn)的上傳限定是最大2M,想上傳超過此設(shè)定的文件,需要調(diào)整PHP、apache等的一些參數(shù)2013-10-10
PHP常用算法和數(shù)據(jù)結(jié)構(gòu)示例(必看篇)
下面小編就為大家?guī)硪黄狿HP常用算法和數(shù)據(jù)結(jié)構(gòu)示例(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
php fckeditor 調(diào)用的函數(shù)
showfck() 編輯器調(diào)用函數(shù)2009-06-06

