123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 16/4/27
- * Time: 下午4:07
- */
- namespace common\modules\config\components;
- use Yii;
- use common\modules\config\models\Config as ConfigModel;
- use yii\base\Component;
- use yii\caching\TagDependency;
- use yii\helpers\VarDumper;
- class Config extends Component
- {
- public $cacheKey = 'allSystemConfigs';
- public $cacheTag = 'systemConfig';
- public $localConfigFile = '@common/config/main-local.php';
- public $envFile = '@root/.env';
- public function init()
- {
- parent::init();
- $this->localConfigFile = \Yii::getAlias($this->localConfigFile);
- }
- public function get($name, $default = '')
- {
- $configs = \Yii::$app->cache->get($this->cacheKey);
- if ($configs === false) {
- $configs = ConfigModel::find()->indexBy('name')->all();
- \Yii::$app->cache->set($this->cacheKey, $configs, 60 * 60, new TagDependency(['tags' => $this->cacheTag]));
- }
- if (isset($configs[$name])) {
- $config = $configs[$name];
- return self::_parse($config->type, $config->value);
- } else {
- return env($name, $default);
- }
- }
- public function set($name, $value)
- {
- if (ConfigModel::findOne(['name' => $name]) != null) {
- $result = ConfigModel::updateAll(['value' => $value], ['name' => $name]);
- if ($result === false) {
- return false;
- }
- TagDependency::invalidate(\Yii::$app->cache, $this->cacheTag);
- } else {
- $this->setEnv($name, $value);
- }
- return true;
- }
- public function has($name)
- {
- return !is_null(ConfigModel::find()->where(['name' => $name])->one()) || getenv($name) !== false;
- }
- /**
- * 解析数组类型配置
- * @param $type
- * @param $value
- * @return array
- */
- private static function _parse($type, $value)
- {
- switch ($type) {
- case ConfigModel::TYPE_ARRAY:
- $return = [];
- $value = trim($value, "\r\n");
- foreach (explode("\r\n", $value) as $val) {
- if (strpos($val, '=>') !== false) {
- list($k, $v) = explode('=>', $val);
- $return[$k] = $v;
- } else {
- $return[] = $val;
- }
- }
- $value = $return;
- break;
- }
- return $value;
- }
- public function getConfigFromLocal()
- {
- $config = require ($this->localConfigFile);
- if (! is_array($config))
- return [];
- return $config;
- }
- /**
- * Sets configuration into the file
- *
- * @param array $config
- */
- public function setConfigToLocal($config = [])
- {
- $content = "<" . "?php return ";
- $content .= VarDumper::export($config);
- $content .= ";";
- file_put_contents($this->localConfigFile, $content);
- }
- public function setEnv($name, $value)
- {
- $file = Yii::getAlias($this->envFile);
- $content = preg_replace("/({$name}\s*=)\s*(.*)/", "\${1}$value", file_get_contents($file));// \${1}修复后边跟数字的bug
- file_put_contents($file, $content);
- }
- }
|