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支持的路由模式比較多,包括路由組、模塊化處理、正則路由、回調處理等,可以通過源碼和文檔結合學習。