路由模块
文章分页:

路由分为应用名称调用和自定义路由两种,并以应用名称调用优先。

应用名称模式

路径调用的格式为:网址 / 应用目录名 / 路径信息

  • 网址:框架所在目录对应的可访问网址,一般为域名地址;
  • 应用目录名:app目录下应用目录名称;
  • 路径信息:除去以上两项之外的路径信息,含查询字串(query string)信息

路由模块将处理好的路径信息发送给应用目录下的 index.php 处理,根据不同组合信息来决定执行的脚本代码。

如:网址为 http://www.test.com ,应用目录名为 Sample ,路径信息为:dir1/dir2?para1=111&para2=222

        URL 即为 http://www.test.com/Sample/dir1/dir2?para1=111&para2=222

经处理将返回全局变量 $info_app ,其内容如下:

array (  
  'name' => '框架示例',  
  'app' => 'Sample',  
  'ver' => '1.0',  
  'intro' => '框架应用示例',  
  'copyright' => '版权所有 2021 Windy2000',  
  'path' =>   
  array (  
    0 => 'dir1',  
    1 => 'dir2',  
  ),  
  'para' =>   
  array (  
    'para1' => '111',  
    'para2' => '222',  
  ),  
  'route' => '/Sample/dir1/dir2',  
)

其中前几项为 app 信息,读取自应用目录下的 info.php 文件,后几项为路径相关信息,可供脚本作为下一步执行的依据。同时,query string 所带的两个参数也可以通过 $_GET 获取。

 

自定义路由

除路径模式之外,框架还支持应用设置自定义规则,来实现某些特殊的访问模式。每个应用目录下可存在一个 route.php 文件,里面规定了自定义路由的相关信息,里面包含了自定义格式($format),自定义路由($rule)和应用接口($api)三项设置:

  • $format - 路径辨别格式,含如下默认格式:
    • [any] - 任意非路径字符
    • [str] - 字母、数字及下划线
    • [int] - 任意数字
    • 自定义格式为 格式索引 => 格式正则,示例如下:
       $format = array(  
          'CamelCase' => '([A-Z][a-z]+)+',  
       );
      上例将匹配驼峰模式的字符串,需要注意的是路径辨别格式需要避免使用特殊字符,尤其是路径间隔符 “/”,以避免出现不可预测的错误。
  • $rule - 路由规则,格式为 array(请求路径, 处理接口)
    • 请求路径:需要以路径间隔符 “/” 为开始,每组间隔符间可以为标准的路径字符串,也可以为已定义的路径辨别格式,但需要注意的是路径辨别格式只能独立使用,不能与其他字符或多格式同时出现在一组间隔符间,如下:
      ‘/dir1/dir2/[int]’       // 正确  
      ‘/dir1/[str]/dir2’       // 正确  
      ‘/dir1/dir2/0_[int]’     // 错误  
      ‘/dir1/[int][str]/dir2’  // 错误
    • 处理接口:指明路径信息对应的处理方法
      • 如为字符串,则该字符串应为可执行的方法名(类静态方法对应“class::method”的模式);
      • 如为数组,则数组的每一项均对应一个方法名,框架会依次执行,除最后一个外,如某个子判断返回false则终止执行,否则上一个函数的返回值将作为下一个函数最后一个参数
      • 如处理方法需要加带参数,可依照"函数名,参数值"的格式,其中参数值可以指定固定值,也可以通过"$1"、"$2"的模式指定为路径对应的匹配部分,需要注意的是匹配依照的是正则表达式中括号出现的顺序,每个辨别格式都会被自动加上括号,如辨别格式中也含有括号,需做响应调整;
      • 处理函数也可为闭包函数,但闭包方法无法直接获取路径参数,但是可以通过全局变量 $info_app 来获得相关信息。
     $rule = array(  
        array('/dir/[str]', 'function'),  
        array('/dir/[int]', array('function_1,$1','function_2')),  
        array('/dir2/[any]', function(){echo 'hello world!';}),    );
  • $api - 应用接口程序,格式如下:
       $api = array(  
           'error' => 'app\myStep\getError'  
       );
    上例声明了 error 接口对应 app\myStep 命名空间下的 getError 方法处理,API 调用地址为:/api/myStep/error/ ,详细方法将在下一节说明。

与路径调用模式一样,路径信息经处理将记录至全局变量 $info_app ,详情可参考对应的示例。

 

系统路由

框架自带如下自定义路由规则:

1 /api/[str]/[any] 自定义应用接口(后文详述),[str]为app名称,[any]为接口名及参数,可通过_GET或_POST接收参数
2 /module/[str]/[any] 模块接口(后文详述),[str]为app名称,[any]为模块名及参数
3 /captcha/[any] 验证码图像接口,[any]为随机数,保证新码生成,验证变量保存在 $_SESSION['captcha']
4 /ms_setting/[any] 获取设置信息接口,[any]为应用名称,获取该应用json格式的设置
5 /ms_language/[str]/[any] 获取语言包接口,[str]为应用名称,[any]为语种索引,获取该应用json格式的设置

 

上一篇:其他模块
下一篇:应用接口