| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace App\Console\Commands;
- use App\Module\System\Models\AdminMenu;
- use Illuminate\Console\Command;
- class CheckAdminMenus extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'admin:check-menus';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = '检查AdminMenu表中的菜单项';
- /**
- * Execute the console command.
- *
- * @return int
- */
- public function handle()
- {
- // 获取游戏系统设置和游戏运营管理菜单
- $systemMenu = AdminMenu::where('title', 'like', '%游戏系统设置%')->first();
- $operationMenu = AdminMenu::where('title', 'like', '%游戏运营管理%')->first();
-
- if (!$systemMenu || !$operationMenu) {
- $this->error('未找到游戏系统设置或游戏运营管理菜单');
- return 1;
- }
-
- $this->info("游戏系统设置菜单ID: {$systemMenu->id}, 标题: {$systemMenu->title}");
- $this->info("游戏运营管理菜单ID: {$operationMenu->id}, 标题: {$operationMenu->title}");
-
- // 获取游戏系统设置下的子菜单
- $systemSubMenus = AdminMenu::where('parent_id', $systemMenu->id)->get();
- $this->info("\n游戏系统设置下的子菜单:");
- foreach ($systemSubMenus as $menu) {
- $this->info("ID: {$menu->id}, 标题: {$menu->title}, URI: {$menu->uri}");
-
- // 获取二级子菜单
- $subSubMenus = AdminMenu::where('parent_id', $menu->id)->get();
- foreach ($subSubMenus as $subMenu) {
- $this->info(" - ID: {$subMenu->id}, 标题: {$subMenu->title}, URI: {$subMenu->uri}");
- }
- }
-
- // 获取游戏运营管理下的子菜单
- $operationSubMenus = AdminMenu::where('parent_id', $operationMenu->id)->get();
- $this->info("\n游戏运营管理下的子菜单:");
- foreach ($operationSubMenus as $menu) {
- $this->info("ID: {$menu->id}, 标题: {$menu->title}, URI: {$menu->uri}");
-
- // 获取二级子菜单
- $subSubMenus = AdminMenu::where('parent_id', $menu->id)->get();
- foreach ($subSubMenus as $subMenu) {
- $this->info(" - ID: {$subMenu->id}, 标题: {$subMenu->title}, URI: {$subMenu->uri}");
- }
- }
-
- // 检查各模块的后台控制器
- $this->info("\n检查各模块的后台控制器:");
- $modules = [
- 'Activity', 'Article', 'Farm', 'File', 'Fund', 'Game', 'GameItems',
- 'OAuth', 'Pet', 'Sms', 'System', 'Task', 'Team', 'User'
- ];
-
- foreach ($modules as $module) {
- $this->info("\n{$module}模块:");
- $controllerDir = app_path("Module/{$module}/AdminControllers");
-
- if (!is_dir($controllerDir)) {
- $this->warn(" - 未找到AdminControllers目录");
- continue;
- }
-
- $controllers = array_filter(scandir($controllerDir), function($file) {
- return !in_array($file, ['.', '..', 'Helper']) && pathinfo($file, PATHINFO_EXTENSION) === 'php';
- });
-
- foreach ($controllers as $controller) {
- $controllerName = pathinfo($controller, PATHINFO_FILENAME);
- $this->info(" - {$controllerName}");
-
- // 尝试猜测URI
- $uri = $this->guessUri($controllerName);
-
- // 检查菜单项是否存在
- $menuExists = AdminMenu::where('uri', $uri)->exists();
- $this->info(" URI: {$uri}, 菜单项" . ($menuExists ? '存在' : '不存在'));
- }
- }
-
- return 0;
- }
-
- /**
- * 根据控制器名称猜测URI
- *
- * @param string $controllerName
- * @return string
- */
- private function guessUri(string $controllerName): string
- {
- // 移除Controller后缀
- $name = str_replace('Controller', '', $controllerName);
-
- // 转换为kebab-case
- $uri = preg_replace('/([a-z])([A-Z])/', '$1-$2', $name);
- $uri = strtolower($uri);
-
- return $uri;
- }
- }
|