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支持的路由模式比较多,包括路由组、模块化处理、正则路由、回调处理等,可以通过源码和文档结合学习。
阅读 3.2k

推荐阅读