Exemple #1
0
 /**
  * 获取扩展模块列表
  * @return array|mixed
  */
 public function modules()
 {
     $cache = Yii::$app->cache;
     if (($modules = $cache->get(self::CACHE_MODULES_DATA)) === false) {
         $modules = [];
         $model = $this->moduleModelClass;
         foreach ($model::models() as $id => $model) {
             $class = ModuleHelper::getBaseNamespace($model) . '\\Module';
             if (!ModuleHelper::isAddonModule($class)) {
                 // 扩展模块必须继承BaseModule
                 continue;
             }
             $modules[$id] = ['class' => $class, 'name' => $model['name']];
         }
         $cache->set(self::CACHE_MODULES_DATA, $modules, null, new TagDependency(['tags' => [ModuleModel::CACHE_MODULES_DATA_DEPENDENCY_TAG]]));
     }
     return $modules;
 }
Exemple #2
0
 /**
  * 执行模块迁移(安装,升级,卸载)脚本
  * @param $type
  * @return bool
  */
 protected function migration($type)
 {
     $class = ModuleHelper::getBaseNamespace($this) . '\\migrations\\WechatMigration';
     if (!class_exists($class)) {
         // 卸载如果迁移文件不存在也直接返回迁移成功(防止卸载失败)
         if ($type == self::MIGRATION_UNINSTALL) {
             return true;
         }
         $this->addError('migration', '模块迁移文件不存在');
         return false;
     }
     $migration = Yii::createObject(['class' => $class, 'module' => $this]);
     switch ($type) {
         case self::MIGRATION_INSTALL:
             $result = $migration->up();
             break;
         case self::MIGRATION_UNINSTALL:
             $result = $migration->down();
             break;
         case self::MIGRATION_UPGRADE:
             $result = $migration->to($this->getOldAttribute('version'), $this->getAttribute('version'));
             break;
         default:
             throw new InvalidParamException("Migration type does not support '{$type}'.");
     }
     if ($result === false) {
         $this->addError('migration', '模块迁移脚本执行失败');
         return false;
     }
     return true;
 }