parse($name); if (is_array($value)) { foreach ($value as $k => $v) $this->set("{$field}.{$k}", $v); } else { $this->data = []; $data = ['name' => $field, 'value' => $value, 'type' => $type]; $this->save('SystemConfig', $data, 'name', ['type' => $type]); } return $this; } /** * 读取配置数据 * @param string $name * @return array|mixed|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function get($name) { list($type, $field, $outer) = $this->parse($name); if (empty($this->data)) foreach ($this->app->db->name('SystemConfig')->select() as $vo) { $this->data[$vo['type']][$vo['name']] = $vo['value']; } if (empty($name)) { return empty($this->data[$type]) ? [] : ($outer === 'raw' ? $this->data[$type] : array_map(function ($value) { return htmlspecialchars($value); }, $this->data[$type])); } else { if (isset($this->data[$type]) && isset($this->data[$type][$field])) { return $outer === 'raw' ? $this->data[$type][$field] : htmlspecialchars($this->data[$type][$field]); } else return ''; } } /** * 数据增量保存 * @param Query|string $dbQuery 数据查询对象 * @param array $data 需要保存或更新的数据 * @param string $key 条件主键限制 * @param array $where 其它的where条件 * @return bool|int|mixed|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function save($dbQuery, $data, $key = 'id', $where = []) { $db = is_string($dbQuery) ? $this->app->db->name($dbQuery) : $dbQuery; list($table, $value) = [$db->getTable(), isset($data[$key]) ? $data[$key] : null]; $map = isset($where[$key]) ? [] : (is_string($value) ? [[$key, 'in', explode(',', $value)]] : [$key => $value]); if (is_array($info = $this->app->db->table($table)->master()->where($where)->where($map)->find()) && !empty($info)) { if ($this->app->db->table($table)->strict(false)->where($where)->where($map)->update($data) !== false) { return isset($info[$key]) ? $info[$key] : true; } else { return false; } } else { return $this->app->db->table($table)->strict(false)->insertGetId($data); } } /** * 解析缓存名称 * @param string $rule 配置名称 * @param string $type 配置类型 * @return array */ private function parse($rule, $type = 'base') { if (stripos($rule, '.') !== false) { list($type, $rule) = explode('.', $rule); } list($field, $outer) = explode('|', "{$rule}|"); return [$type, $field, strtolower($outer)]; } }