CheckAdminMenus.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Module\System\Models\AdminMenu;
  4. use Illuminate\Console\Command;
  5. class CheckAdminMenus extends Command
  6. {
  7. /**
  8. * The name and signature of the console command.
  9. *
  10. * @var string
  11. */
  12. protected $signature = 'admin:check-menus';
  13. /**
  14. * The console command description.
  15. *
  16. * @var string
  17. */
  18. protected $description = '检查AdminMenu表中的菜单项';
  19. /**
  20. * Execute the console command.
  21. *
  22. * @return int
  23. */
  24. public function handle()
  25. {
  26. // 获取游戏系统设置和游戏运营管理菜单
  27. $systemMenu = AdminMenu::where('title', 'like', '%游戏系统设置%')->first();
  28. $operationMenu = AdminMenu::where('title', 'like', '%游戏运营管理%')->first();
  29. if (!$systemMenu || !$operationMenu) {
  30. $this->error('未找到游戏系统设置或游戏运营管理菜单');
  31. return 1;
  32. }
  33. $this->info("游戏系统设置菜单ID: {$systemMenu->id}, 标题: {$systemMenu->title}");
  34. $this->info("游戏运营管理菜单ID: {$operationMenu->id}, 标题: {$operationMenu->title}");
  35. // 获取游戏系统设置下的子菜单
  36. $systemSubMenus = AdminMenu::where('parent_id', $systemMenu->id)->get();
  37. $this->info("\n游戏系统设置下的子菜单:");
  38. foreach ($systemSubMenus as $menu) {
  39. $this->info("ID: {$menu->id}, 标题: {$menu->title}, URI: {$menu->uri}");
  40. // 获取二级子菜单
  41. $subSubMenus = AdminMenu::where('parent_id', $menu->id)->get();
  42. foreach ($subSubMenus as $subMenu) {
  43. $this->info(" - ID: {$subMenu->id}, 标题: {$subMenu->title}, URI: {$subMenu->uri}");
  44. }
  45. }
  46. // 获取游戏运营管理下的子菜单
  47. $operationSubMenus = AdminMenu::where('parent_id', $operationMenu->id)->get();
  48. $this->info("\n游戏运营管理下的子菜单:");
  49. foreach ($operationSubMenus as $menu) {
  50. $this->info("ID: {$menu->id}, 标题: {$menu->title}, URI: {$menu->uri}");
  51. // 获取二级子菜单
  52. $subSubMenus = AdminMenu::where('parent_id', $menu->id)->get();
  53. foreach ($subSubMenus as $subMenu) {
  54. $this->info(" - ID: {$subMenu->id}, 标题: {$subMenu->title}, URI: {$subMenu->uri}");
  55. }
  56. }
  57. // 检查各模块的后台控制器
  58. $this->info("\n检查各模块的后台控制器:");
  59. $modules = [
  60. 'Activity', 'Article', 'Farm', 'File', 'Fund', 'Game', 'GameItems',
  61. 'OAuth', 'Pet', 'Sms', 'System', 'Task', 'Team', 'User'
  62. ];
  63. foreach ($modules as $module) {
  64. $this->info("\n{$module}模块:");
  65. $controllerDir = app_path("Module/{$module}/AdminControllers");
  66. if (!is_dir($controllerDir)) {
  67. $this->warn(" - 未找到AdminControllers目录");
  68. continue;
  69. }
  70. $controllers = array_filter(scandir($controllerDir), function($file) {
  71. return !in_array($file, ['.', '..', 'Helper']) && pathinfo($file, PATHINFO_EXTENSION) === 'php';
  72. });
  73. foreach ($controllers as $controller) {
  74. $controllerName = pathinfo($controller, PATHINFO_FILENAME);
  75. $this->info(" - {$controllerName}");
  76. // 尝试猜测URI
  77. $uri = $this->guessUri($controllerName);
  78. // 检查菜单项是否存在
  79. $menuExists = AdminMenu::where('uri', $uri)->exists();
  80. $this->info(" URI: {$uri}, 菜单项" . ($menuExists ? '存在' : '不存在'));
  81. }
  82. }
  83. return 0;
  84. }
  85. /**
  86. * 根据控制器名称猜测URI
  87. *
  88. * @param string $controllerName
  89. * @return string
  90. */
  91. private function guessUri(string $controllerName): string
  92. {
  93. // 移除Controller后缀
  94. $name = str_replace('Controller', '', $controllerName);
  95. // 转换为kebab-case
  96. $uri = preg_replace('/([a-z])([A-Z])/', '$1-$2', $name);
  97. $uri = strtolower($uri);
  98. return $uri;
  99. }
  100. }