ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 路由 使用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!'; }); ```