12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Cache;
- /**
- * @group 通用接口
- */
- class EnumController extends Controller
- {
- /**
- * 获取枚举数据
- *
- * @queryParam enum string required 枚举类名称,例如:UserType,OrderStatus等 Example: UserType
- *
- * @response 200 {
- * "items": [
- * {
- * "label": "普通用户",
- * "value": 1
- * },
- * {
- * "label": "VIP用户",
- * "value": 2
- * }
- * ],
- * "message": "",
- * "code": 0
- * }
- *
- * @response 400 {
- * "items": [],
- * "message": "枚举名称不能为空",
- * "code": 400
- * }
- *
- * @response 404 {
- * "items": [],
- * "message": "枚举类不存在",
- * "code": 404
- * }
- */
- public function getEnumData(Request $request): JsonResponse
- {
- $enumName = $request->input('enum');
- if (empty($enumName)) {
- return response()->json([
- 'items' => [],
- 'message' => '枚举名称不能为空',
- 'code' => 400
- ]);
- }
- // 从Memcached缓存获取数据
- $cacheKey = "enum:{$enumName}";
- $enumData = Cache::get($cacheKey);
- if (!$enumData) {
- // 构造完整的枚举类名
- $enumClass = "App\\Enums\\{$enumName}";
- // 检查类是否存在
- if (!class_exists($enumClass)) {
- return response()->json([
- 'items' => [],
- 'message' => "枚举类 {$enumName} 不存在",
- 'code' => 404
- ]);
- }
- // 缓存不存在,获取枚举数据并转换格式
- $rawData = $enumClass::all();
- $items = [];
- foreach ($rawData as $value => $label) {
- $items[] = [
- 'label' => $label,
- 'value' => $value
- ];
- }
- // 存入Memcached缓存,设置过期时间为1天
- Cache::put($cacheKey, $items, 86400);
- $enumData = $items;
- }
- return response()->json([
- 'items' => $enumData,
- 'message' => '',
- 'code' => 0
- ]);
- }
- }
|