mall_id)) { throw new Exception('未设置Mall Id'); } } /** * 获取设置前处理 * * @param array $setting * @return array */ public function beforeGetSetting(array $setting): array { return $setting; } /** * 存储设置前处理 * * @param array $setting * @return array */ public function beforeSetSetting(array $setting): array { return $setting; } /** * 获取设置 * * @return array */ public function getSetting(string $name = 'basic') { $this->_before(); $this->isSet = false; $setting = Yii::$app->services->setting->addons->get($this->mall_id, $this->getAddosName(), $name); if ($this->hiddens) return $this->hiddenArrayKeys($setting); if ($this->shows) return $this->showArrayKeys($setting); return $this->getMergeSetting($setting); } /** * 设置配置 * * @param array $setting * @param string $name * @return boolean */ public function setSetting(array $setting, string $name = 'basic') { $this->_before(); $this->isSet = true; return Yii::$app->services->setting->addons->set( $this->mall_id, $this->getAddosName(), [$name => $this->getMergeSetting($setting)] ); } /** * 合并设置 * * @param array $setting * @return array */ protected function getMergeSetting(array $setting) { !$this->isSet && $setting = $this->beforeGetSetting($setting); $this->isSet && $setting = $this->beforeSetSetting($setting); return array_merge($this->defaultSetting(), $setting); } /** * 隐藏部分配置文件不返回 * * @param array $hidden_keys * @return self */ public function hiddenSetting(array $hidden_keys) { $this->shows = []; $this->hiddens = array_values($hidden_keys); return $this; } /** * 只显示部分配置文件 * * @param array $show_keys * @return self */ public function showSetting(array $show_keys) { $this->hiddens = []; $this->shows = array_values($show_keys); return $this; } /** * @param array $setting * @return array */ protected function hiddenArrayKeys(array $setting) { return array_diff_key($this->getMergeSetting($setting), array_flip($this->hiddens)); } /** * @param array $setting * @return array */ protected function showArrayKeys(array $setting) { return array_intersect_key($this->getMergeSetting($setting), array_flip($this->shows)); } }