argument('id'); // 获取菜单项 $menu = AdminMenu::find($id); if (!$menu) { $this->error("未找到ID为{$id}的菜单项"); return 1; } $this->info("菜单项详细信息:"); $this->table( ['属性', '值'], [ ['ID', $menu->id], ['标题', $menu->title], ['URI', $menu->uri], ['父ID', $menu->parent_id], ['排序', $menu->order], ['图标', $menu->icon], ['显示', $menu->show ? '是' : '否'], ['创建时间', $menu->created_at], ['更新时间', $menu->updated_at] ] ); // 获取子菜单 $childMenus = AdminMenu::where('parent_id', $menu->id)->get(); if ($childMenus->isNotEmpty()) { $this->info("\n子菜单:"); $table = []; foreach ($childMenus as $childMenu) { $table[] = [ 'id' => $childMenu->id, 'title' => $childMenu->title, 'uri' => $childMenu->uri, 'order' => $childMenu->order, 'show' => $childMenu->show ? '是' : '否' ]; } $this->table(['ID', '标题', 'URI', '排序', '显示'], $table); } else { $this->info("\n没有子菜单"); } // 检查URI是否有效 if (!empty($menu->uri)) { $this->info("\n检查URI是否有效:"); // 获取所有路由 $routes = Route::getRoutes(); $routeUris = []; foreach ($routes as $route) { if (Str::startsWith($route->uri(), 'admin/')) { $routeUris[] = str_replace('admin/', '', $route->uri()); } } // 获取所有模块的控制器 $modules = [ 'Activity', 'Article', 'Farm', 'File', 'Fund', 'Game', 'GameItems', 'OAuth', 'Pet', 'Sms', 'System', 'Task', 'Team', 'User' ]; $controllerUris = []; foreach ($modules as $module) { $controllerDir = app_path("Module/{$module}/AdminControllers"); if (!is_dir($controllerDir)) { continue; } $controllers = array_filter(scandir($controllerDir), function($file) { return !in_array($file, ['.', '..']) && pathinfo($file, PATHINFO_EXTENSION) === 'php' && !Str::contains($file, 'Helper'); }); foreach ($controllers as $controller) { $controllerName = pathinfo($controller, PATHINFO_FILENAME); $uri = $this->getControllerUri($controllerName); $controllerUris[] = $uri; } } $uri = ltrim($menu->uri, '/'); $isValidRoute = false; $isValidController = false; // 检查路由 foreach ($routeUris as $routeUri) { if (Str::startsWith($routeUri, $uri) || $routeUri === $uri) { $isValidRoute = true; break; } } // 检查控制器 foreach ($controllerUris as $controllerUri) { if ($controllerUri === $uri) { $isValidController = true; break; } } if ($isValidRoute) { $this->info(" - 路由: 有效"); } else { $this->error(" - 路由: 无效"); } if ($isValidController) { $this->info(" - 控制器: 有效"); } else { $this->error(" - 控制器: 无效"); } if (!$isValidRoute && !$isValidController) { $this->error(" - URI无效,可能会导致404错误"); // 删除菜单项 if ($this->option('delete') || $this->confirm('是否要删除此菜单项?')) { // 更新子菜单的父ID foreach ($childMenus as $childMenu) { $childMenu->parent_id = $menu->parent_id; $childMenu->save(); $this->info(" - 更新子菜单: ID = {$childMenu->id}, 标题 = {$childMenu->title}, 新父ID = {$menu->parent_id}"); } // 删除菜单项 $menu->delete(); $this->info(" - 已删除菜单项: ID = {$menu->id}, 标题 = {$menu->title}, URI = {$menu->uri}"); } } } return 0; } /** * 根据控制器名称猜测URI * * @param string $controllerName * @return string */ protected function getControllerUri(string $controllerName): string { // 移除Controller后缀 $name = str_replace('Controller', '', $controllerName); // 转换为kebab-case $uri = Str::kebab($name); return $uri; } }