EnumController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\JsonResponse;
  5. use Illuminate\Support\Facades\Cache;
  6. /**
  7. * @group 通用接口
  8. */
  9. class EnumController extends Controller
  10. {
  11. /**
  12. * 获取枚举数据
  13. *
  14. * @queryParam enum string required 枚举类名称,例如:UserType,OrderStatus等 Example: UserType
  15. *
  16. * @response 200 {
  17. * "items": [
  18. * {
  19. * "label": "普通用户",
  20. * "value": 1
  21. * },
  22. * {
  23. * "label": "VIP用户",
  24. * "value": 2
  25. * }
  26. * ],
  27. * "message": "",
  28. * "code": 0
  29. * }
  30. *
  31. * @response 400 {
  32. * "items": [],
  33. * "message": "枚举名称不能为空",
  34. * "code": 400
  35. * }
  36. *
  37. * @response 404 {
  38. * "items": [],
  39. * "message": "枚举类不存在",
  40. * "code": 404
  41. * }
  42. */
  43. public function getEnumData(Request $request): JsonResponse
  44. {
  45. $enumName = $request->input('enum');
  46. if (empty($enumName)) {
  47. return response()->json([
  48. 'items' => [],
  49. 'message' => '枚举名称不能为空',
  50. 'code' => 400
  51. ]);
  52. }
  53. // 从Memcached缓存获取数据
  54. $cacheKey = "enum:{$enumName}";
  55. $enumData = Cache::get($cacheKey);
  56. if (!$enumData) {
  57. // 构造完整的枚举类名
  58. $enumClass = "App\\Enums\\{$enumName}";
  59. // 检查类是否存在
  60. if (!class_exists($enumClass)) {
  61. return response()->json([
  62. 'items' => [],
  63. 'message' => "枚举类 {$enumName} 不存在",
  64. 'code' => 404
  65. ]);
  66. }
  67. // 缓存不存在,获取枚举数据并转换格式
  68. $rawData = $enumClass::all();
  69. $items = [];
  70. foreach ($rawData as $value => $label) {
  71. $items[] = [
  72. 'label' => $label,
  73. 'value' => $value
  74. ];
  75. }
  76. // 存入Memcached缓存,设置过期时间为1天
  77. Cache::put($cacheKey, $items, 86400);
  78. $enumData = $items;
  79. }
  80. return response()->json([
  81. 'items' => $enumData,
  82. 'message' => '',
  83. 'code' => 0
  84. ]);
  85. }
  86. }