多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# URL和路由 [TOC] ## 访问方式 1. 带参数访问`m`为模块`c`为控制器`a`为操作,不分大小写 2. 伪静态情况下`/index/index/index` 会被解析为index模块index控制器index操作, >如果只有两个字段的情况如下` /index/index`,且当前访问的域名已经绑定啦模块,则解析为 **绑定的模块/控制器/方法**,如果没有绑定模块则为解析为**模块/控制器/默认操作方法** ## URL生成 生成的样式跟配置的模式有关 ``` php //0正常的参数方式 //1模块控制器操作使用路径方式, //参数使用正常参数方式 如 http://www.xxx.com/index/index/index.html?a=b&b=c 'url_model' => 0, ``` 使用助手函数url方法生成,生成的样式和url模式有关,如下(注意大小写) ``` php //生成url url('Menu/list');//m=admin&c=menu&a=list //控制器分层生成 url('sys.UserGroup/add');//m=admin&c=user_group&a=add //生成指定模块下的方法 url('/index/Article/list') ;//m=index&c=article&a=list ``` ## 域名绑定模块 域名映射到对应的模块,此设置可以省去url中的模块名字 ``` php 'domain_map' => [ // 'ank.loc' => 'admin', // 'ank.dbg' => 'admin', 'api.ank.loc' => 'api', 'api.ank.dbg' => 'api', ], ``` ## 路由配置 伪静态的时候使用url路由功能 ``` php 'url_route' => [ // 路由规则为整个字符串的完全匹配 // 路由规则参数格式为 :参数名,影射到 模块/控制器/操作(三个都不能少) // 只要当前或生成的url符合后面的操作方法路径就可以匹配转换 // 键中没有标记出来的参数会在后面加?a=1&b=2这样的格式 'news/:id' => 'admin/index/index', //下面是两种方法 'sajax/:action' => 'admin/sys.ajax/index', 'sajax/:action/:menu_id' => 'admin/sys.ajax/index', ], ``` url在生成时会自动转换成路由中对应的规则,如上所示 ``` php url('/admin/sys.ajax/index',['id'=>3]); //生成后的url为 /sajax/3.html ``` 路由生成时从上往下匹配,只要有一个匹配就结束匹配 ## 路由配置文件 此文件是为啦把路由配置单独放一块 ``` php /** * 路由规则为从上到下匹配,匹配规则有两种 * 正则:以 /开头的规则一定要是完整的正则表达式,这种模式生成url时不会自动转换 * 冒号字符串: 以这种规则匹配的地址,生成url时自动替换参数到对应规则的url中 */ return [ '/\/.*/' => function ($request) { return 'hellow world'; }, '/static/' => function ($request) { return 'static'; }, 'article/:article_id' => '/index/Article/detail', //下面是两种方法 'cat/:fenlei' => '/index/Article/index', 'flag/:flag' => '/index/Article/index', 'p/:p' => '/index/Index/index', 'tag/:tag_id' => '/index/Article/taglist', 'help' => '/index/service/index', 'color/tiaose' => '/index/Tool/tiaose', 'format/index' => '/index/Tool/css', 'sajax/:action/:menu_id' => '/admin/sys.Ajax/index', ]; ``` 路由中如果直接返回Response实例则会直接响应,如果返回的是字符串则会自动创建Response响应