Appearance
概述
EBAOZU 系统基于 ThinkPHP 8.0 路由机制,禁用了注解路由,所有对外接口均显式在 route/ 目录下的各独立路由文件中定义。不同业务端通过专属路由文件与前缀进行隔离。
路由文件与前缀映射
| 路由文件 | URL 前缀 | 适用模块 | 对应控制器目录 |
|---|---|---|---|
route/admin.php | /adminapi/* | 总后台管理 | app/controller/admin/ |
route/api.php | /api/* | 移动端与对外 API | app/controller/api/ |
route/store.php | /storeapi/* | 门店后台 | app/controller/store/ |
route/supplier.php | /supplierapi/* | 供应商后台 | app/controller/supplier/ |
route/cashier.php | /cashierapi/* | 线下收银台 | app/controller/cashier/ |
路由定义语法与示例
基础路由定义
php
use think\facade\Route;
// GET 请求
Route::get('user/list', 'v1.user.User/index')->name('getUserList')->option(['real_name' => '获取用户列表']);
// POST 请求
Route::post('user/save', 'v1.user.User/save')->name('saveUser')->option(['real_name' => '保存用户']);
// 带参数路由
Route::get('user/detail/:id', 'v1.user.User/read')->name('getUserDetail');平台后台新增路由 (route/admin.php)
php
Route::group('adminapi', function () {
// 自定义功能分组
Route::group('custom', function () {
Route::get('list', 'v1.custom.CustomController/index')
->option(['real_name' => '自定义数据列表']);
Route::get('info/:id', 'v1.custom.CustomController/read')
->option(['real_name' => '自定义数据详情']);
Route::post('save', 'v1.custom.CustomController/save')
->option(['real_name' => '保存自定义数据']);
Route::delete('delete/:id', 'v1.custom.CustomController/delete')
->option(['real_name' => '删除自定义数据']);
});
})->prefix('admin.')->middleware([
\app\http\middleware\admin\AdminAuthTokenMiddleware::class,
\app\http\middleware\admin\AdminCkeckRoleMiddleware::class,
\app\http\middleware\SystemLogMiddleware::class, 'admin'
]);移动端/用户 API 新增路由 (route/api.php)
php
Route::group('api', function () {
// 1. 公开免登录接口
Route::group(function () {
Route::get('custom/public_data', 'v1.custom.Custom/getPublicData');
});
// 2. 可选登录接口(未登录不报错,登录后可获取个性化数据)
Route::group(function () {
Route::get('custom/goods_list', 'v1.custom.Custom/getGoodsList');
})->middleware(\app\http\middleware\api\AuthTokenMiddleware::class, false);
// 3. 必须登录接口
Route::group(function () {
Route::get('custom/user_records', 'v1.custom.Custom/getUserRecords');
Route::post('custom/apply', 'v1.custom.Custom/apply')
->middleware(\app\http\middleware\BlockerMiddleware::class); // 防重复提交
})->middleware(\app\http\middleware\api\AuthTokenMiddleware::class, true);
})->prefix('api.');控制器参数获取规范
控制器中提取请求参数推荐使用 app\Request 的 getMore() / postMore() 方法:
php
namespace app\controller\admin\v1\custom;
use app\basic\OpenBaseController;
use app\Request;
class CustomController extends OpenBaseController
{
public function index(Request $request)
{
// 批量提取 GET 参数,带默认值
[$keyword, $status] = $request->getMore([
['keyword', ''],
['status', ''],
], true); // true 返回一维数组以便解构
return app('json')->success($this->services->getList(compact('keyword', 'status')));
}
public function save(Request $request)
{
// 批量提取 POST 参数
$data = $request->postMore([
'title',
['sort', 0],
['status', 1],
]);
$this->services->saveData($data);
return app('json')->success('保存成功');
}
}注意事项
- 禁止注解路由:系统所有路由必须在
route/下显式定义,方便代码检索与安全审计。 - 权限菜单同步:后台新增的路由如果需要受 RBAC 角色权限控制,需在后台【设置 -> 权限管理 -> 菜单管理】中添加对应的 API 路径与请求方法。
- 路由调试:修改路由后如遇 404,可执行
php think clear清除路由缓存,或通过php think route:list排查。