Git --NB Framework 中文教程
目录 ▾ 路由

最后更新于:2018-09-12 10:10
67次阅读0条评论

路由

NB的路由是由nb\Router类提供,主要支持两种模式。在上面简单访问章节中已经用到了一种,也是NB里默认的路由模式。下面来详细说一下两种路由的用法。

默认路由模式

简单访问章节里已经详细讲解过,这里只做一个总结:

http://demo.nb.cx[/模块][/文件夹]/控制器[/动作(即方法)]

[]代表在某些情况下可省略的字段。

关于模块,这里先不讲,会在模块章节里面细说。

默认路由是以/分割pathinfo,以分割后的长度来判断访问的对象

长度为【1】或【2】时:

此时访问的是应用目录里的默认控制器

http://demo.nb.cx/test,表示访问的是demo/application/controller下的Test.php控制器的index方法。
http://demo.nb.cx/test/nbcx,表示访问的是demo/application/controller下的Test.php控制器的nbcx方法。

长度为【3】时:

此时访问的可能是模块,也可能是应用目录里自定义目录控制器,取决于框架配置里是否注册了对应的模块

http://demo.nb.cx/api/test/nbcx,
此时,会先判断是否存在模块api,如果存在,则表示访问的是demo/module/api/controller下的Test.php控制器的nbcx方法。
如果不存在:
则表示访问的是demo/application/api下的Test.php控制器的nbcx方法。
如果不存在,则表示访问的是demo/application/controller/api下的Test.php控制器的nbcx方法。

长度为【4】时:

此时访问的是模块的自定义目录控制器

http://demo.nb.cx/bind/admin/user/index,表示访问的是demo/module/bind/admin下的User.php控制器的index方法。
当然,如果不存在,会继续访问demo/module/bind/controller/admin下的User.php控制器的index方法。

长度为【0】时:

此时访问的对象由框架配置里的设置决定

我们在框架配置里添加一个设置为:

namespace common;

class Config extends nb\Config {
    //default_index的值就是域名后的字段相对应:[/模块][/文件夹]/控制器[/动作(即方法)]
    public $default_index = 'test/nbcx';
}

此时访问http://demo.nb.cx,相当于访问http://demo.nb.cx/test/nbcx

自定义路由

自定义路由可以把url伪装成任意样子,实质还是依赖于默认路由。自定义路由的开启方式是在框架配置里设置'router'属性。
先来看几个列子体会一下:

1.定义http://demo.nb.cx路由到controller\api\Test控制器的index动作:

class Config extends nb\Config {
    
    public $router = [
        'close'=>false,
        'match'=>[
            'router'=>[
                'url'=>'/',
                'action'=>'api/test/index'
            ],
        ]
    ];
}

2.定义http://demo.nb.cx/good.jsp路由到controller\Test控制器的jsp动作:

class Config extends nb\Config {
    
    public $router = [
        'close'=>false,
        'match'=>[
            'router'=>[
                'url'=>'/',
                'action'=>'api/test/index'
            ],
            'jsp'=>[
                'url'=>'/good.jsp',
                'action'=>'test/jsp'
            ],
        ]
    ];
}

3.定义http://demo.nb.cx/usr/12.htm路由到controller\User的index动作,并且把12作为ID参数传个index动作:

class Config extends nb\Config {
    
    public $router = [
        'close'=>false,
        'match'=>[
            'router'=>[
                'url'=>'/',
                'action'=>'api/test/index'
            ],
            'user'=>[
                'url'=>'/usr/[id:digital].htm',
                'action'=>'user/index'
            ],
        ]
    ];
}

通过上面三个列子,大家应该初步知道了自定义路由怎么使用了吧!
下面我们详细讲解一下配置的字段意义。

close设置是否关闭默认路由模式:

  • 值为false表示不关闭。

  • 值为true表示关闭,这样如果自定义路由没有匹配到,将不在进行默认路由匹配。

match是设置自定义路由表达式,在上面三个例子中,每一个路由表达式中:

  • url是匹配规则

  • action是对应的默认路由

匹配规则中,可用下面方式来匹配不确定内容:

[参数名:数据类型[:长度]]

数据类型:

名称对应正则
string(.%s)
char([^/]%s)
digital([0-9]%s)
alpha([_0-9a-zA-Z-]%s)
alphaslash([_0-9a-zA-Z-/]%s)
split((?:[^/]+/)%s[^/]+)
上一篇:响应输出
下一篇:重定向

相关评论

您需要登录后才可以发表评论