路由规则

路由规则是一个多维数组,可以包含多条规则,路由规则定义是从根目录开始,而不是基于模块名的。根目录是基于项目部署位置的 PATH_INFO,如:

规则的定义以 / 为参数分割符(无论的 PATH_INFO 分隔符设置是什么,请确保在定义路由规则表达式的时候统一使用 / 进行 URL 参数分割)。以下是一些例子:

  1. 'route' => array(
  2. 'route_rule' => array( //路由规则
  3. //静态例子 规则 => 地址
  4. 'index/article/index' => 'index/article/show',
  5. //动态例子 array(规则, 地址)
  6. array('article/:year/:month/:id', 'index/article/index'),
  7. //正则例子 array(规则, 地址, 参数)
  8. array('/^cate[\/\S+]+\/(\d+)+\S*$/i', 'index/cate/index', 'id'),
  9. ... // 更多规则
  10. ),
  11. ),

静态规则

静态规则为一个 键名 => 键值 方式表达的数组,如:

  1. 'route_rule' => array( // 路由规则
  2. 'article/show' => 'index/article/show', // 规则 => 地址
  3. ... // 更多规则
  4. ),

动态规则

动态规则为一个 array(规则, 地址) 方式表达的数组,如:

  1. 'route_rule' => array( // 路由规则
  2. array('article/:year/:month/:id', 'index/article/index') // array(规则, 地址)
  3. ... // 更多规则
  4. ),

每个参数中以 : 开头的参数都表示动态变量,并且会自动绑定到动作的对应参数。


正则规则

正则规则为一个 array(规则, 地址, 参数) 方式表达的数组,其中 参数 可以为数组或者字符串,系统会根据正则规则匹配到的结果,自动绑定到动作的对应参数,如:

  1. 'route_rule' => array( // 路由规则
  2. array('/^cate[\/\S+]+\/(\d+)+\S*$/i', 'index/cate/index', 'id') // array(正则规则, 地址, 参数)
  3. ... // 更多规则
  4. ),
  1. 'route_rule' => array( // 路由规则
  2. array('/^cate[\/\x{4e00}-\x{9fa5}a-zA-Z0-9\_\-]+\/id\/(\d+)+(\/page\/(\d+))?.*$/ui', 'index/cate/index', array('id', '', 'page')), //正则例子 array(规则, 地址, 参数)
  3. ... // 更多规则
  4. ),

特别注意

根据 概况 -> 开发规范 章节的要求,方法的命名使用驼峰法(首字母小写),但是路由都使用小写,并且系统会强制转换 URL 请求,因此 ginkgo 采用了一种自动转换的策略,当路由中的动作命名为小写字母和下划线时,系统会将动作自动转换为驼峰法(首字母小写)。

如果当前访问的地址是

http://server/index.php/index/index/hello_world

控制器类定义如下:

  1. namespace app\ctrl\index;
  2. class Index {
  3. public function helloWorld() {
  4. return 'hello_world';
  5. }
  6. }