您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用thinkphp5框架實現路由的原理是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
路由理解
概括的說:路由就是網絡請求的url與thinkphp應用層的邏輯處理地址的對應關系。
通俗的說:路由就是把url的請求優雅的對應到你想要執行的操作方法。
路由其實就是把真實的url地址隱藏起來,使用訪問地址來訪問應用(網站或OA等)。
通常這樣定義:“訪問地址”=》“真實地址”,這代表了一種映射關系。就好比用“1”代表去肯德基吃飯,用“0”代表去麥當勞吃飯,你預先告知過同事這個規則的話,只需要發送“1”或“0”給同事,同事就能理解要去哪里吃飯,一個道理。
路由的規則是thinkphp規定好的,比如TP的訪問規則是:根目錄/模塊/控制器/方法,那么我們只需要定義一下映射關系“reg”=》“index/user/reg”,此時只需要再瀏覽器輸入“域名/reg”就能訪問“index模塊/user/控制器/reg方法”這個地址了。
這樣的優點:
1、沒有處理過的url路徑都是由 ...模塊/控制器/方法/參數 構成,如果不加以“掩飾”的話,會被別人看清內部結構,不夠安全。
2、可以讓url地址更加簡潔、優雅、美觀。
通常是在應用的路由配置文件application/route.php進行注冊。
2種注冊方式:1路由動態注冊和2配置定義的方式
配置定義的方式
其中,__pattern__是指定義全局變量規則,
對應Route.php中:
路由分組
這個功能允許把相同前綴的路由定義合并分組,
示例一:
admin/Admin/test方法:
public function test() { echo 'i am test <br>'; print_r(input()); }
示例如下(注意接收的參數):
示例二:
關于定義路由后,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
動態注冊:
Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)'); 或者簡化方法: Route:: get(路由規則, 路由地址, 路由參數, 變量規則)
批量注冊:
Route::rule([ '路由規則1'=>'路由地址和參數', '路由規則2'=>['路由地址和參數','路由參數(數組)','變量規則(數組)'] ... ],'','請求類型','匹配參數(數組)','變量規則');
注意:
混合模式下,注冊路由后,原來的訪問地址會自動失效~
每個參數中以“:”開頭的參數都表示動態變量,并且會自動綁定到操作方法的對應參數。
注冊多個路由規則后,系統會依次遍歷注冊過的滿足請求類型的路由規則,一旦匹配到正確的路由規則后則開始調用控制器的操作方法,后續規則就不再檢測。
路由綁定
入口文件綁定模塊后,再定義路由規則,就不需要加模塊名稱了。
// [ 應用入口文件 ] //綁定admin模塊 define('BIND_MODULE', 'admin');
// 給登錄url定義路由 Route::rule('login', 'Login/index');
注意: define(‘BIND_MODULE', ‘index/index');綁定到控制器時,控制器名稱index要小寫,大寫會post不成功。。。
關于路由到動態的模塊、控制器或者操作
'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
明白一點了,不能這樣寫,可選參數只能放到路由規則的最后,如果在中間使用了可選參數的話,后面的變量都會變成可選參數。
上述內容就是使用thinkphp5框架實現路由的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。