115 lines
3.4 KiB
PHP
Executable File
115 lines
3.4 KiB
PHP
Executable File
<?php
|
|
namespace app\model;
|
|
|
|
use think\facade\Config as CConfig;
|
|
|
|
class ConfigSetting extends Base
|
|
{
|
|
// 是否开启同步生成扩展配置文件
|
|
const with_write_config = true;
|
|
|
|
public static function setConfigByName(string $name, array $content)
|
|
{
|
|
$config = self::getConfigByName($name);
|
|
|
|
if(empty($config)) {
|
|
self::create([
|
|
'name' => $name,
|
|
'contents' => json_encode($content, JSON_UNESCAPED_UNICODE)
|
|
]);
|
|
} else {
|
|
self::updateById($config['id'], [
|
|
'contents' => json_encode($content, JSON_UNESCAPED_UNICODE)
|
|
]);
|
|
}
|
|
|
|
// 同步写入与生成配置文件
|
|
if (self::with_write_config) {
|
|
self::setWithExtraConfigFile($name, $content);
|
|
}
|
|
}
|
|
|
|
public static function getConfigByName(string $name)
|
|
{
|
|
$item = self::where('name', $name)
|
|
->findOrEmpty()
|
|
->toArray();
|
|
|
|
return self::convertContents($item);
|
|
}
|
|
|
|
// 通过数据库查询配置信息
|
|
public static function getConfigContentsByName(string $name)
|
|
{
|
|
$item = self::getConfigByName($name);
|
|
return $item['contents'] ?? [];
|
|
}
|
|
|
|
public static function convertContents(array $item)
|
|
{
|
|
if(empty($item)) {
|
|
return [];
|
|
}
|
|
$item['contents'] = empty($item['contents']) ? [] : json_decode($item['contents'], true);
|
|
return $item;
|
|
}
|
|
|
|
|
|
// 优先通过扩展配置文件查询配置信息,没有查询到再从数据库中查询
|
|
public static function getConfigContentsWithFileByName(string $name)
|
|
{
|
|
$conf = [];
|
|
if (self::with_write_config) {
|
|
$extraFileName = self::parseExtraConfigFileNameByName($name);
|
|
CConfig::load('extra/'.$extraFileName, $name);
|
|
$conf = config($name);
|
|
}
|
|
|
|
if (!empty($conf)) {
|
|
return $conf;
|
|
|
|
} else {
|
|
$item = self::getConfigByName($name);
|
|
return $item['contents'] ?? [];
|
|
}
|
|
}
|
|
|
|
// 通过配置名称解析扩展配置文件名称
|
|
public static function parseExtraConfigFileNameByName(string $name)
|
|
{
|
|
// extra开头
|
|
if (substr($name, 0, 5) == 'extra') {
|
|
$configFileName = substr($name, 5);
|
|
// 字符串首字母转小写
|
|
$configFileName = lcfirst($configFileName);
|
|
} else {
|
|
$configFileName = $name;
|
|
}
|
|
|
|
return $configFileName;
|
|
}
|
|
|
|
// 扩展配置信息写入扩展配置文件
|
|
public static function setWithExtraConfigFile(string $name, array $content = [])
|
|
{
|
|
try {
|
|
$configFileName = self::parseExtraConfigFileNameByName($name);
|
|
if (!is_numeric($configFileName) && empty($configFileName)) {
|
|
return false;
|
|
}
|
|
|
|
$extraPath = config_path().'extra/';
|
|
checkPathExistWithMake($extraPath);
|
|
$configFil = $extraPath.$configFileName.'.php';
|
|
$configData = var_export($content, true);
|
|
|
|
file_put_contents($configFil, '<?php' . PHP_EOL . 'return ' . $configData . ';');
|
|
|
|
return true;
|
|
} catch (\Exception $e) {
|
|
\think\facade\Log::write('请检查扩展配置文件目录config/extra是否拥有可读写权限', 'error');
|
|
|
|
return false;
|
|
}
|
|
}
|
|
} |