6
0
Fork 0

Update settings

release
李静 2022-01-08 16:10:24 +08:00
parent ec52c4b18d
commit 693404cd55
1 changed files with 36 additions and 17 deletions

View File

@ -6,7 +6,6 @@ use App\Models\Setting;
use Illuminate\Contracts\Cache\Repository as Cache;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Arr;
use Throwable;
class SettingService
{
@ -39,25 +38,21 @@ class SettingService
return $this->getMany($key);
}
if (! array_key_exists($key, $this->items)) {
$_key = $this->getSettingKey($key);
if (! array_key_exists($_key, $this->items)) {
try {
$this->items[$key] = $this->cache->remember($this->cacheKey($key), $this->ttl, function () use ($key) {
$_key = $this->keyHandle($key);
$settings = Setting::where('key', $_key[0])->firstOrFail();
if (isset($_key[1])) {
return Arr::get($settings->value, $_key[1]);
} else {
return $settings->value;
}
$this->items[$_key] = $this->cache->remember($this->cacheKey($_key), $this->ttl, function () use ($_key) {
$settings = Setting::where('key', $_key)->firstOrFail();
return $settings->value;
});
} catch (ModelNotFoundException $e) {
return $default;
} catch (Throwable $th) {
return $default;
}
}
return $this->items[$key];
return Arr::get($this->items[$_key], $key, $default);
}
/**
@ -89,8 +84,20 @@ class SettingService
$keys = is_array($key) ? $key : [$key => $value];
foreach ($keys as $key => $value) {
$_key = $this->keyHandle($key);
Setting::where('key', $_key[0])->update(['value->'.$_key[1] => $value]);
$_key = $this->getSettingKey($key);
$setting = Setting::firstOrNew(['key' => $_key]);
if (strpos($key, '.') === false) {
$setting->value = $value;
} else {
$json = [$_key => $setting->value];
data_set($json, $key, $value);
$setting->value = $json[$_key];
}
$setting->save();
$this->cleanCache($key);
}
@ -116,8 +123,20 @@ class SettingService
return "settings.{$key}";
}
protected function keyHandle(string $key)
/**
* 获取设置项的 key
*
* @param string $key
* @return string
*/
protected function getSettingKey(string $key): string
{
return explode('.', $key);
if (strpos($key, '.') === false) {
return $key;
}
$segments = explode($key, '.');
return $segments[0];
}
}