EnumController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\JsonResponse;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Redis;
  6. class EnumController extends Controller
  7. {
  8. /**
  9. * 获取枚举数据
  10. *
  11. * @param Request $request
  12. * @return JsonResponse
  13. */
  14. public function getEnumData(Request $request): JsonResponse
  15. {
  16. $enumName = $request->input('enum');
  17. if (empty($enumName)) {
  18. return response()->json([
  19. 'data' => [
  20. 'items' => [],
  21. 'msg' => '枚举名称不能为空',
  22. 'status' => 400
  23. ]
  24. ]);
  25. }
  26. try {
  27. // 构造完整的枚举类名
  28. $enumClass = "App\\Enums\\{$enumName}";
  29. // 检查类是否存在
  30. if (!class_exists($enumClass)) {
  31. return response()->json([
  32. 'data' => [
  33. 'items' => [],
  34. 'msg' => "枚举类 {$enumName} 不存在",
  35. 'status' => 404
  36. ]
  37. ]);
  38. }
  39. // 从Redis缓存获取数据
  40. $cacheKey = "enum:{$enumName}";
  41. $enumData = Redis::get($cacheKey);
  42. if (!$enumData) {
  43. // 缓存不存在,获取枚举数据并转换格式
  44. $rawData = $enumClass::all();
  45. $items = [];
  46. foreach ($rawData as $value => $label) {
  47. $items[] = [
  48. 'label' => $label,
  49. 'value' => $value
  50. ];
  51. }
  52. // 存入Redis缓存,设置过期时间为1天
  53. Redis::setex($cacheKey, 86400, json_encode($items));
  54. } else {
  55. $items = json_decode($enumData, true);
  56. }
  57. return response()->json([
  58. 'data' => [
  59. 'items' => $items,
  60. 'msg' => '',
  61. 'status' => 0
  62. ]
  63. ]);
  64. } catch (\Throwable $e) {
  65. return response()->json([
  66. 'data' => [
  67. 'items' => [],
  68. 'msg' => $e->getMessage(),
  69. 'status' => 500
  70. ]
  71. ]);
  72. }
  73. }
  74. }