# 路由
使用thinkphp,建议开启强制路由;
不开启强制路由的程序猿不是个好好程序猿(可以有效防止黑客恶意访问,如:猜后台地址,猜文件路径)
开启强制路由:文件位置:config/route.php
'url_route_must' => true, // 是否强制使用路由
### 认识系统路由
当前主要针对CRMEB客户关系管理系统为例指导大家如何配置路由。
对路由的基本知识点,我们在不做过多赘述,不太懂的小伙伴可以前往
[Thinkphp开发文档](https://www.kancloud.cn/manual/thinkphp6_0/1037494)进行学习。
接口地址:http://域名/应用模块目录名/具体业务控制器目录/方法名
controller目下下的业务类文件和route路由下的路由文件基本是一一对应的。
大家也会发现个别业务控制器没有对应的路由文件,这个需要说明一点,业务控制器并不是强制一一对应的,
当然你完全可以把order控制器中的接口地址配置到user路由文件里面,但是为了各模块功能清晰,保证统一管理,不建议你这么做。
### 如何新增路由
我们以order控制器为例,新增order_demo方法。控制器目录:admin/controller/store/order/StoreOrder.php
~~~
public function order_demo()
{
$where = $this->request->postMore([
['one', '2'],
['two', '2'],
]);
$data = $this->services->orderCount($where);
return $this->success($data);
}
~~~
配置路由,路由目录:/route/admin.php
~~~
Route::post('demo', 'admin.store.order.StoreOrder/order_demo')->name('OrderDemo');
~~~
### 如何修改路由请求方式
我们以order控制器为例,请求访问chart方法。`Route::get('chart', 'admin.store.order.StoreOrder/chart')->name('StoreOrderChart')`,是我们当前接口的路由配置,前端以get请求调取接口即可:http://serverName/adminapi/order/chart。
如果我们要修改请求方式,将get修改为post,记得修改四处地方:
1. 将接口数据接收方式改为post接收
~~~
public function chart()
{
$where = $this->request->postMore([
['data', '', '', 'time'],
[['type', 'd'], 0],
]);
$data = $this->services->orderCount($where);
return $this->success($data);
}
~~~
2. 路由文件配置改为post请求。
~~~
Route::post('chart', 'admin.store.order.StoreOrder/chart')->name('StoreOrderChart');
~~~
3. 前端调用请求方式务必改为post请求
4. 后台菜单【设置】【管理权限】【权限规则】进入数据列表,将订单->订单管理->订单数据请求方式改为post即可,
### 如何给路由添加混合参数
路由配置:在方法名后/:参数
~~~
Route::get('chart/:id', 'admin.store.order.StoreOrder/chart')->name('StoreOrderChart');
~~~
控制器:入参传入$id
~~~
public function chart($id)
{
$where = $this->request->getMore([
['data', '', '', 'time'],
[['type', 'd'], 0],
]);
$where['orderId'] = $id;
$data = $this->services->orderCount($where);
return $this->success($data);
}
~~~
### 资源路由
支持设置`RESTFul`请求的资源路由,方式如下:
`Route::resoure('user','user');`
表示注册了一个名称为`user`的资源路由到`User`控制器,系统会自动注册7个路由规则,如下:
| 标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) |
| --- | --- | --- | --- |
| index | GET | user | index |
| create| GET | user/create | create |
| save | POST | user | save |
| read | GET | user/:id | read |
| edit | GET | user/:id/edit | edit |
| update | PUT | user/:id | update |
| delete | DELETE | user/:id | delete |
### 路由分组
>使用`Route`类的`group`方法进行注册,路由分组也支持嵌套,例如:
```
//分组嵌套
Route::group('user',function(){
Route::get('user_info','user/user/info');
Route::get('group','user.gourp/list');
Route::get('label','user.label/list');
});
//嵌套
Route::group('user',function(){
Route::get('user_info','user/user/info');
Roure::group('group',function(){
Route::get('group','user.gourp/list');
});
Route::group('label',function(){
Route::get('label','user/label/list');
});
});
```
### 路由分组与路由中间件配合使用,可以控制访问权限
```
Route::group('user',function(){
Route::get('user/[:type]','user/list');
})->middleware(\app\index\middleware\AuthTokenMiddleware::class, true);
```
### 跨域请求
如果某个路由或者分组需要支持跨域请求,可以使用
```
Route::get('user/[:type]','user/list')->allowCrossDomain();
```
跨域请求一般会发送一条`OPTIONS`的请求,一旦设置了跨域请求的话,不需要自己定义`OPTIONS`请求的路由,系统会自动加上。
会默认带上header:
```
Access-Control-Allow-Origin:\*
Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE
Access-Control-Allow-Headers:Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With
```
也可以添加或更改header
```
Route::get('user/[:type]','user/list')->allowCrossDomain([
'Access-Control-Allow-Origin' => 'thinkphp.cn',
'Access-Control-Allow-Credentials' => 'true'
]);
```
### MISS路由
如果希望在没有匹配到所有的路由规则后执行一条设定的路由,可以注册一个单独的`MISS`路由:
```
Route::miss('public/index');
```
也可以使用闭包
```
Route::miss(function(){
return '404 Not Found!';
});
```
- 序言
- 系统简介
- 系统介绍
- 前端脑图
- 项目介绍
- 新手入门(源码安装)
- 运行环境
- 服务器配置及安装
- 视频安装教程
- 服务器及环境搭建
- 服务器购买
- 域名购买
- 域名解析
- 服务器配置
- 宝塔配置
- 创建站点
- 安装项目
- 1.源码上传(必看内容)
- 2.PHP扩展安装
- 3.环境配置
- 4.运行服务
- 5.一键安装
- 注意事项(很重要)
- 重启swoole服务
- linux安装swoole方法
- 特别注意事项
- mysql 5.7注意事项
- https域名
- ssl证书申请
- 公众号配置
- 公众号配置
- 公众号开发配置
- 公众号菜单
- 设置公众号菜单
- 关键字
- 跳转网页
- 跳转小程序
- 小程序配置
- 1.微信平台配置
- 2.CRMEB后台配置
- 3.前端提交审核
- 4.确认发布
- 支付配置
- 支付配置
- 公众号支付
- 小程序支付
- 支付宝支付
- 其他配置
- 公众号模板消息
- 小程序订阅消息
- 商业授权
- 授权说明
- 申请授权
- 安装常见问题汇总
- 请修改sql_mode文件为NO_AUTO提示
- 版本更新
- 客服设置
- uni-app 打包H5、公众号
- 版本更新
- 清空数据
- 测试域名
- 部署多套多商户
- 使用说明
- 商品分类
- 分类说明
- 分类管理
- 品牌分类
- 商品标签
- 商品管理
- 发布商品
- 商品规格
- 配置说明
- 文件上传
- 移动端展示说明
- 首页
- 分类页
- 个人中心
- 热门搜索
- 分销规则
- 分销配置
- 分销员管理
- 分销规则说明
- 分销员等级
- 分销礼包
- 佣金说明
- 用户管理
- 商户用户管理
- 平台用户管理
- 用户协议
- 用户搜索记录
- 秒杀
- 秒杀规则
- 开启秒杀活动
- 直播
- 主播实名认证
- 开启直播
- 添加直播商品
- 预售
- 开启全款预售
- 开启定金预售
- 预售协议
- 专题
- 后台配置
- 前端展示
- 助力
- 开启助力
- 查看助力活动
- 拼团
- 虚拟拼团设置
- 开启拼团
- 查看拼团活动
- 积分
- 积分设置
- 积分来源
- 积分使用
- 提现
- 提现规则
- 提现步骤
- 新闻资讯
- 新闻页面
- 发布资讯
- 账户管理
- 账号信息
- 账户资金
- 优惠券
- 添加优惠券
- 发布优惠券
- 领取及使用
- 发放优惠券
- 订单管理
- 后台订单处理
- 前端订单处理
- 订单退款
- 订单打印
- 客服管理
- 添加客服
- 客服权限
- 门店自提
- 开启门店自提
- 设置核销权限
- 订单核销说明
- 商户管理
- 商户分类
- 商户入驻
- 商户列表
- 商户菜单管理
- 店铺类型
- 财务
- 财务对账
- 发票管理
- 自动分账(v1.5及以后版本)
- 邮费说明
- 运费设置
- 运费组成
- 运费模板
- 物流配置
- 公告管理
- 店铺相关
- 店铺定位设置
- 店铺街入口
- 店铺活动
- 店铺基本信息设置
- 小票打印
- 小票打印机配置
- 小票打印机设置
- 技术文档
- 开发规范
- 数据字典
- 目录结构
- 移动端路由
- 系统配置
- 后台表单说明
- 短信设置
- 短信账户
- 短信配置
- 短信模板
- 一号通
- 电子面单
- 短信提醒
- 商品采集
- 物流查询
- 付费采集商品配置
- PC端展示说明
- PC端开启
- PC端平台页面配置
- PC端店铺页面配置
- 保障服务
- 移动端商品管理
- 开启移动端商品管理
- 功能说明
- 会员管理
- 会员管理
- 会员权益
- 会员配置
- 社区功能
- 社区分类
- 社区话题
- 社区文章
- 社区评论
- 社区配置
- 通知管理
- 移动前端
- 目录结构
- 配置说明
- 页面路径
- 后台前端说明
- 总后台目录结构
- 商户后台目录结构
- 开发和构建
- APP 打包
- 基础配置
- 开发调试
- 打包上线
- App打包
- PC端说明
- 安装教程
- 目录结构
- 打包教程
- 常见问题
- 服务器问题
- 服务器环境说明
- MySQL 5.7注意事项
- PHP fileinfo扩展安装
- 后台登录页幻灯片
- 后台登录页logo
- 论坛常见问题汇总
- 个人中心菜单加链接
- 子账号登录名
- 前后端分离配置
- 重启swoole进程
- 开论坛勋章
- 源码下载地址
- 查看/隐藏版本号
- 搜索商品后服务挂了
- 开发文档
- 架构
- config配置文件
- 容器和依赖注入
- 异常处理
- 路由
- 控制器模块
- 日志处理
- 自定义指令
- CRMEB类库
- Basic基类
- Exceptions异常处理
- Interfaces接口类
- Jobs消息队列
- services服务类
- traits
- listens定时监听类
- 接口流程
- Controller
- Repository
- Dao
- Model
- 流程
- 订单流程
- 下单流程
- 退款流程
- 二开教程
- 定义新的接口
- 创建新的页面
- 创建新的组合数据
- 更换短信模板