initializeBackend($request); if ($response !== null) { return $response; } if ($request->method() !== 'GET') { return $this->error(__('Parameter error')); } $row = Db::name('game_config')->where('config_key', ZiHuaDictionaryLib::CONFIG_KEY)->find(); $items = ZiHuaDictionaryLib::parseFromConfigValue($row['config_value'] ?? null); return $this->success('', [ 'items' => $items, 'categories' => ZiHuaDictionaryLib::CATEGORIES, ]); } /** * 保存 JSON 数组(仅 value_type=json) */ public function save(WebmanRequest $request): Response { $response = $this->initializeBackend($request); if ($response !== null) { return $response; } if ($request->method() !== 'POST') { return $this->error(__('Parameter error')); } $payload = $request->post(); if (!is_array($payload)) { return $this->error(__('Parameter %s can not be empty', [''])); } $items = $payload['items'] ?? null; if (!is_array($items)) { return $this->error('items 必须为数组'); } try { $clean = ZiHuaDictionaryLib::prepareItemsForSave($items); $json = ZiHuaDictionaryLib::encodeForDb($clean); } catch (InvalidArgumentException $e) { return $this->error($e->getMessage()); } $now = time(); try { $exists = Db::name('game_config')->where('config_key', ZiHuaDictionaryLib::CONFIG_KEY)->find(); if ($exists) { Db::name('game_config')->where('config_key', ZiHuaDictionaryLib::CONFIG_KEY)->update([ 'config_value' => $json, 'value_type' => 'json', 'update_time' => $now, ]); } else { Db::name('game_config')->insert([ 'config_key' => ZiHuaDictionaryLib::CONFIG_KEY, 'config_value' => $json, 'value_type' => 'json', 'remark' => '36字花字典 JSON 数组(独立表单维护)', 'create_time' => $now, 'update_time' => $now, ]); } } catch (Throwable $e) { return $this->error($e->getMessage()); } return $this->success(__('Saved successfully')); } }