zzwy2/app/model/ConfigSetting.php

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;
}
}
}