{{wikiTitle}}
路由
复制链接
编辑文档
路由
使用thinkphp,建议开启强制路由;
不开启强制路由的程序猿不是个好好程序猿(可以有效防止黑客恶意访问,如:猜后台地址,猜文件路径)
开启强制路由:文件位置:config/route.php
'url_route_must' => true, // 是否强制使用路由
认识系统路由
当前主要针对CRMEB客户关系管理系统为例指导大家如何配置路由。
对路由的基本知识点,我们在不做过多赘述,不太懂的小伙伴可以前往
Thinkphp开发文档进行学习。 接口地址: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,记得修改四处地方:
- 将接口数据接收方式改为post接收
public function chart() { $where = $this->request->postMore([ ['data', '', '', 'time'], [['type', 'd'], 0], ]); $data = $this->services->orderCount($where); return $this->success($data); }- 路由文件配置改为post请求。
Route::post('chart', 'admin.store.order.StoreOrder/chart')->name('StoreOrderChart'); - 前端调用请求方式务必改为post请求
- 后台菜单【设置】【管理权限】【权限规则】进入数据列表,将订单->订单管理->订单数据请求方式改为post即可,
- 路由文件配置改为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!'; });
评论({{cateWiki.comment_num}})
最新
最早
{{cateWiki.page_view_num}}人看过该文档
评论(0)
最新
最早
2249人看过
登录/注册
即可发表评论
{{item.user ? item.user.nickname : ''}}
(自评)
{{item.content}}
搜索结果
为您找到{{wikiCount}}条结果
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}
位置:
{{path.name}}
{{(i+1) == getCataloguePathData(item.catalogue).length ? '':'/'}}
