{{wikiTitle}}
路由
目录:
路由
使用thinkphp,建议开启强制路由;
不开启强制路由的程序猿不是个好好程序猿(可以有效防止黑客恶意访问,如:猜后台地址,猜文件路径)
开启强制路由:
文件位置:config/route.php
‘url_route_must’ => true, // 是否强制使用路由
认识系统路由
以adminapi模块举例,下面是adminapi模块目录
下图是controller目录文件和route目录文件截图
接口地址:http://域名/应用模块目录名/具体业务控制器目录/方法名
通过上图大家很明显可以看出来controller目下下的业务类文件和route路由下的路由文件基本是一一对应的。
大家也会发现个别业务控制器没有对应的路由文件,这个需要说明一点,业务控制器并不是强制一一对应的,
当然你完全可以把order控制器中的接口地址配置到user路由文件里面,但是为了各模块功能清晰,保证统一管理,不建议你这么做。
如何新增路由
我们以order控制器为例,新增order_demo方法。控制器目录:adminapi/controller/v1/order/StoreOrder.php
public function order_demo()
{
$where = $this->request->postMore([
['one', '2'],
['two', '2'],
]);
$data = $this->services->orderCount($where);
return $this->success($data);
}
配置路由,路由目录:adminapi/route/order.php
Route::post('demo', 'v1.order.StoreOrder/order_demo')->name('OrderDemo');
如何修改路由请求方式
我们以order控制器为例,请求访问chart方法。adminapi/controller/v1/order/StoreOrder.php 如图1.3
<center>图1.3</center>
下面我们再看下它对应的路由配置,adminapi/route/order.php 如图1.4<center>图1.4</center>
如上图1.4,Route::get(‘chart’, ‘v1.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', 'v1.order.StoreOrder/chart')->name('StoreOrderChart');
3. 前端调用请求方式务必改为post请求
4. 后台菜单【设置】【管理权限】【权限规则】进入数据列表,将订单->订单管理->订单数据请求方式改为post即可,
如何给路由添加混合参数
路由配置:在方法名后/:参数
Route::get('chart/:id', 'v1.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!'; });