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'); // 所有請求都支持的路由規則

復制代碼

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

 

路由表達式

規則表達式

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

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參數分割,除非是使用組合變量的情況);

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

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

可選定義

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

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

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

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

完全匹配 

如果希望URL進行完全匹配,可以在路由表達式最后使用 $ 符號,例如:

復制代碼
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里面的參數,隱式傳入需要的操作中,有時候能夠起到一定的安全防護作用,后面我們會提到)。例如:

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'); 因為后者更符合語義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM