博客 / 詳情

返回

Phalcon2.0.9 路由處理源碼解析

router()和route()

router()

Phalcon的路由處理器,使用該類解析路由。

route()

Phalcon的路由類,該類主要作為路由的實現類,在調用router()->add()方法添加路由時,主要是實例化一個route()類。

router()初始化

1、初始化路由時,可以指定是否默認增加/:controller/:action和/:controller/:action/:params的兩條路由。

2、lean自定義解析命令空間、控制器和action,並設置router的_defaultNamespce、_defaultController、_defaultAction屬性

3、設置路由處理的_params、defaultParams、_routes屬性(屬性作用見下方)。

router()->handle(string uri = null)

1、判斷是否傳入了uri參數,若未傳入,則從$_GET['URL']$_SERVER['REQUEST_URI']中獲取;若傳入,則處理傳入的uri。

2、處理路由右邊多於的`/`字符。

3、處理router:beforeCheckRoutes事件。

4、循環遍歷已經注入的所有路由(`for route in reverse this->_routes`),接下來通過若干方面去匹配當前需要處理的路由。

  • 獲取route的請求方式,判斷當前請求的路由和route的請求方式是否匹配,若不匹配,則continue。
  • 獲取主機名hostName(Phalcon路由支持限制主機名),判斷當前請求的路由是否是當前限制的主機名,若不符合,則continue。
  • 觸發事件router:beforeCheckRoute。
  • 觸發路由匹配前的回調函數(Phalcon支持路由匹配前調用回調)。

支持回調

  • 若路由找到匹配且匹配了默認路由,Phalcon支持走默認路由。

支持默認路由

5、若通過上述循環遍歷,沒有找到路由,則走defaultController等。
默認解析處理

6、若通過上述循環遍歷,找到了路由,則從路由中解析出命名空間、控制器等。

小結

總得來説,Phalcon支持的路由模式比較多,包括路由組、模塊化處理、正則路由、回調處理等,可以通過源碼和文檔結合學習。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.