游戏-游戏配置-优化样式,增强验证
This commit is contained in:
@@ -246,11 +246,21 @@ Route::get('/admin/security/dataRecycleLog/index', [\app\admin\controller\securi
|
||||
Route::post('/admin/security/dataRecycleLog/restore', [\app\admin\controller\security\DataRecycleLog::class, 'restore']);
|
||||
Route::get('/admin/security/dataRecycleLog/info', [\app\admin\controller\security\DataRecycleLog::class, 'info']);
|
||||
|
||||
// ==================== 显式路由(优先级高,避免动态路由误匹配) ====================
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.User/defaultWeightPresets', [\app\admin\controller\game\User::class, 'defaultWeightPresets']);
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.User/defaultWeightByChannel', [\app\admin\controller\game\User::class, 'defaultWeightByChannel']);
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.user/defaultWeightPresets', [\app\admin\controller\game\User::class, 'defaultWeightPresets']);
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.user/defaultWeightByChannel', [\app\admin\controller\game\User::class, 'defaultWeightByChannel']);
|
||||
|
||||
// 游戏渠道:删除前统计关联数据(显式路由,避免动态路由 404)
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.Channel/deleteRelatedCounts', [\app\admin\controller\game\Channel::class, 'deleteRelatedCounts']);
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.channel/deleteRelatedCounts', [\app\admin\controller\game\Channel::class, 'deleteRelatedCounts']);
|
||||
|
||||
// ==================== 兼容 ThinkPHP 风格 URL(module.Controller/action) ====================
|
||||
// 前端使用 /admin/user.Rule/index 格式,需转换为控制器调用
|
||||
Route::add(
|
||||
['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'],
|
||||
'/admin/{controllerPart:[a-zA-Z]+\\.[a-zA-Z0-9]+}/{action}',
|
||||
'/admin/{controllerPart:[a-zA-Z]+\\.[a-zA-Z0-9]+}/{action:[^/]+}',
|
||||
function (\Webman\Http\Request $request, string $controllerPart, string $action) {
|
||||
$pos = strpos($controllerPart, '.');
|
||||
if ($pos === false) {
|
||||
@@ -258,8 +268,21 @@ Route::add(
|
||||
}
|
||||
$module = substr($controllerPart, 0, $pos);
|
||||
$controller = substr($controllerPart, $pos + 1);
|
||||
$class = '\\app\\admin\\controller\\' . strtolower($module) . '\\' . $controller;
|
||||
if (!class_exists($class)) {
|
||||
// game.user / game.User 等:小写控制器名需解析为 User.php(PSR-4 类名 StudlyCase)
|
||||
$class = null;
|
||||
$candidates = array_unique([
|
||||
$controller,
|
||||
ucfirst($controller),
|
||||
ucfirst(strtolower($controller)),
|
||||
]);
|
||||
foreach ($candidates as $base) {
|
||||
$tryClass = '\\app\\admin\\controller\\' . strtolower($module) . '\\' . $base;
|
||||
if (class_exists($tryClass)) {
|
||||
$class = $tryClass;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($class === null) {
|
||||
return new Response(404, ['Content-Type' => 'application/json'], json_encode(['code' => 404, 'msg' => '404 Not Found', 'data' => []], JSON_UNESCAPED_UNICODE));
|
||||
}
|
||||
if (!method_exists($class, $action)) {
|
||||
@@ -281,6 +304,26 @@ Route::add(
|
||||
}
|
||||
);
|
||||
|
||||
// 兜底:closure 显式调用,避免路由绑定在某些情况下仍落到 404
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.User/defaultWeightByChannel/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\User())->defaultWeightByChannel($request);
|
||||
});
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.user/defaultWeightByChannel/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\User())->defaultWeightByChannel($request);
|
||||
});
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.User/defaultWeightPresets/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\User())->defaultWeightPresets($request);
|
||||
});
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.user/defaultWeightPresets/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\User())->defaultWeightPresets($request);
|
||||
});
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.Channel/deleteRelatedCounts/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\Channel())->deleteRelatedCounts($request);
|
||||
});
|
||||
Route::add(['GET', 'POST', 'HEAD'], '/admin/game.channel/deleteRelatedCounts/', function (\Webman\Http\Request $request) {
|
||||
return (new \app\admin\controller\game\Channel())->deleteRelatedCounts($request);
|
||||
});
|
||||
|
||||
// ==================== CORS 预检(OPTIONS) ====================
|
||||
// 放在最后注册;显式加上前端会请求的路径,再加固通配
|
||||
Route::add('OPTIONS', '/api/index/index', [\app\common\middleware\AllowCrossDomain::class, 'optionsResponse']);
|
||||
|
||||
Reference in New Issue
Block a user