要了解yangzie是如何处理请求的,需要先了解下yangzie的路由规则,yangzie按模块module来组织代码,每个module里面的所有功能内容都是独立的,每个模块互相不影响和依赖(可以把module看作一个mini 的app),所以每个模块的路由信息、数据模型和控制器都以module作为一个整体来存放:
1.路由表
路由表在模块下的__config__的config方法中进行配置,规则如下:
- 数组的key,比如上面的uri,表示要匹配的url路径,但不需要域名部分,只需要路径中的path部分即可。u
- uri支持正则表达式,比如foobar/(?P<id>\d+),这将匹配所有foobar/后面带数字的地址,/(?P<id>\d+)是正则的写法,你可以根据情况调整,其中P<id>对匹配到的数据进行命名,在控制器中可通过$request->get_var(‘id’)获得匹配到的值
- controller节点,配置处理的控制器名,也就是生成脚本中输入的名字,关于控制器名请见Controller
- action节点,指定的controller中处理请求的方法,如果不指定,默认就是控制器的index方法
- args节点,是一个数组,用于访问该请求时,静态传入给action的一些数据,这些数据在控制器中可通过$request->get_var(‘key’)获取;在某些情况下不同的uri映射到同一个controller方式有需要做某些区分时,可能用得上
- 由于每个模块的路由表是独立的,可能会存在冲突的情况,当同一个url在多个模块的路由表都满足时,则以第一个匹配到的为准
- 空uri是一个特殊的路由,表示直接访问域名时复制处理的控制器
2.缺省路由方式
路由表配置不是必须的,如果没有配置,yangzie提供一种缺省的路由方式,规则是module/controller/action。即域名后面的部分按照这个规则去解析,如果没有解析到controller或者action,默认都是index
- /user,解析到user模块的index控制器的index方法
- /user/add,解析到user模块的add控制器的index方法
- /user/foo/bar,解析到user模块的foo控制器的bar方法