ThinkPHP5快速入門,路由定義

路由定義

| Route::rule('路由表達式','路由地址','請求類型');         
> route 目錄下的任何路由定義文件都是有效的,默認的路由定義文件是 route.php 
> 能夠更改文件名,或者添加多個路由定義文件(你能夠進行模塊定義區分,但最終都會一塊兒加載)。
> 請求類型參數不區分大小寫。   

路由規則:

複製代碼
註冊路由到index模塊的News控制器的read操做
| Route::rule('new/:id','index/News/read');
咱們訪問:
| http://serverName/new/5
會自動路由到:
| http://serverName/index/news/read/id/5
而且原來的訪問地址會自動失效。  
複製代碼

快捷方式註冊

  1.   GET     GET請求      get
  2.   POST     POST請求    post
  3.   PUT     PUT請求    put
  4.   DELETE   DELETE請求     delete
  5.   PATCH     PATCH請求        patch
  6.   *        任何請求類型     any
複製代碼
| Route::快捷方法名('路由表達式','路由地址');

  使用示例以下:
  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'); // 全部請求都支持的路由規則php

複製代碼

註冊多個路由規則後,系統會依次遍歷註冊過的知足請求類型的路由規則,一旦匹配到正確的路由規則後則開始執行最終的調度方法,後續規則就再也不檢測。id 能夠經過函數參數獲取,也可經過request()->param()獲取thinkphp

 

路由表達式

規則表達式

一般包含靜態地址和動態地址,或者兩種地址的結合,例以下面都屬於有效的規則表達式:安全

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

注:規則表達式的定義以 / 爲參數分割符(不管你的 PATH_INFO 分隔符設置是什麼,請確保在定義路由規則表達式的時候統一使用 / 進行URL參數分割,除非是使用組合變量的狀況);app

  每一個參數中以 : 開頭的參數都表示動態變量,而且會自動綁定到操做方法的對應參數;函數

  URL訪問 PATH_INFO 分隔符使用 pathinfo_depr 配置,但不管如何配置,都不影響路由的規則表達式的路由分隔符定義。thinkphp5

可選定義

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

Route::get('blog/:year/[:month]','Blog/archive'); //變量用 [ ] 包含起來後就表示該變量是路由匹配的可選變量

下面的URL訪問地址均可以被正確的路由匹配:
http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12

注:可選參數只能放到路由規則的最後,若是在中間使用了可選參數的話,後面的變量都會變成可選參數。 url

徹底匹配 

若是但願URL進行徹底匹配,能夠在路由表達式最後使用 $ 符號,例如:spa

複製代碼
Route::get('new/:cate$', 'News/category');
這樣定義後
http://serverName/index.php/new/info
會匹配成功,而
http://serverName/index.php/new/info/2
則不會匹配成功。
若是是採用
Route::get('new/:cate', 'News/category');
方式定義的話,則兩種方式的URL訪問均可以匹配成功。
若是須要全局進行URL徹底匹配,能夠在 app.php 中設置
// 開啓路由徹底匹配
'route_complete_match' => true,
複製代碼

額外參數

在路由跳轉的時候支持額外傳入參數對(額外參數指的是不在URL裏面的參數,隱式傳入須要的操做中,有時候可以起到必定的安全防禦做用,後面咱們會提到)。例如:code

Route::get('blog/:id','blog/read?status=1&app_id=5');

上面的路由規則定義中額外參數的傳值方式都是等效的。 status 和 app_id 參數都是URL裏面不存在的,屬於隱式傳值,固然並不必定須要用到,只是在須要的時候可使用。參數值能夠經過request()->param()獲取。

路由標識

若是你須要快速的根據路由生成URL地址,能夠在定義路由的時候指定生成標識(但要確保惟一)。

複製代碼
// 註冊路由到index模塊的News控制器的read操做
Route::name('new_read')->rule('new/:id','index/News/read');
生成路由地址的時候就可使用
url('new_read',['id'=>10]);
若是不定義路由標識的話,使用下面的方式生成
url('index/News/read',['id'=>10]);
V5.1.6+ 版本開始,路由標識的用法調整,原來的用法:
// 註冊路由到index模塊的News控制器的read操做
Route::name('new_read')->rule('new/:id','index/News/read');
須要改成:
// 註冊路由到index模塊的News控制器的read操做
Route::rule('new/:id','index/News/read')->name('new_read');
由於後者更符合語義。
相關文章
相關標籤/搜索