# 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響應