TP5之路由study

路由是應用開發中比較關鍵的一個環節,其主要做用包括但不限於:
  • 讓URL更規範以及優雅;
  • 隱式傳入額外請求參數;
  • 統一攔截並進行權限檢查等操做;
  • 綁定請求數據;
  • 使用請求緩存;
  • 路由中間件支持(V5.1.6版本以上!);
因爲採用了路由規則的批量匹配檢測算法,V5.1.6+版本開始,路由的解析性能大幅提高。
路由解析的過程通常包含:
  • 路由定義:完成路由規則的定義和參數設置;
  • 路由檢測:檢查當前的URL請求是否有匹配的路由;
  • 路由解析:解析當前路由實際對應的操做(方法或閉包);
  • 路由調度:執行路由解析的結果調度(主業務邏輯);
掌握路由主要是要掌握路由定義及參數設置,其它環節是由系統自動完成的。
路由的主體規劃和定義:應該儘量在應用開發前完成,在後期能夠進行路由的參數調整和規則增補。
    路由僅針對[  PATH_INFO  ]方式的URL有效
ThinkPHP5.1的路由定義更加對象化,而且默認開啓路由(不能關閉),若是一個URL沒有定義路由,則採用
默認的PATH_INFO 模式訪問URL:
http://serverName/index.php/module/controller/action/param/value/...
在不使用路由的狀況下,仍然能夠經過操做方法的參數綁定空控制器、空操做、等特性
實現URL地址的簡化(可查看官方文檔手冊)。
Route類註冊使用:think\facade\Route類靜態調用。 facade :門面類(一種設計模式)

強制force路由

app.php配置文件中設置
'url_route_must' => true,
將開啓強制使用路由,這種方式下面必須嚴格給每個訪問地址定義路由規則(包括首頁),不然將拋出異常。
首頁的路由規則採用/定義便可,例以下面把網站首頁路由輸出Hello,world!
Route::get('/', function () {
return 'Hello,world!';
});

延遲解析

若是你定義了太多的路由,擔憂影響性能,能夠開啓路由的延遲解析功能,只須要在app.php配置文件中設置:
// 開啓路由延遲解析'url_lazy_route' => true,
儘可能經過路由分組或者域名路由來定義路由才能發揮延遲解析的優點。
一旦開啓路由的延遲解析,將會對定義的域名路由和分組路由進行延遲解析,也就是說只有實際匹配到該域名或者分組後纔會進行路由規則的註冊,避免沒必要要的註冊和解析開銷。
推薦的方式是開發模式下關閉延遲解析,部署後開啓並生成路由映射緩存。
開啓路由延遲解析後,將會致使你的URL生成沒法準確識別路由規則的反解,但能夠經過路由映射緩存指令(參考命令行章節的生成路由映射緩存一節)來解決。

路由規則合併解析(v5.1.6+)

V5.1.6+版本開始,路由規則支持合併解析,能夠大大提高路由解析的性能。
能夠在app.php文件中設置開啓全局合併規則,
// 開啓路由合併解析'route_rule_merge' => true,
或者在路由定義的時候對某個分組單獨開啓合併規則解析。
Route::group('', function () {
Route::rule('hello/:name','hello');
Route::rule('think/:name','think');
})->mergeRuleRegex();
這樣該分組下的全部路由規則不管定義多少個都只須要匹配檢查一次便可。
相關文章
相關標籤/搜索