1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 16/7/2
- * Time: 下午6:12
- */
- namespace common\components;
- use common\models\Module;
- use Yii;
- use yii\base\BootstrapInterface;
- use yii\base\Component;
- use yii\helpers\ArrayHelper;
- class LoadModule extends Component implements BootstrapInterface
- {
- public function bootstrap($app)
- {
- // 先判断是否安装,没安装不操作~
- if (!file_exists(Yii::getAlias('@root/web/storage/install.txt'))) {
- return;
- }
- $models = Module::findOpenModules(Module::TYPE_CORE);
- $bootstrapType = $app->id;
- foreach ($models as $model) {
- $modulePackage = Yii::$app->moduleManager->findOne($model->id);
- if ($modulePackage === null) {
- continue;
- }
- $class = [
- 'class' => $modulePackage->getModuleClass(),
- 'params' => $modulePackage->getConfig()
- ];
- $this->setModule($model->id, $class);
- if ($model->bootstrap == '*') {
- $bootstraps = ['frontend', 'backend', 'api', 'wechat', 'console'];
- } else {
- $bootstraps = explode("|", $model->bootstrap);
- }
- if (in_array($bootstrapType, $bootstraps)) {
- $module = \Yii::$app->getModule($model->id);
- if ($module instanceof BootstrapInterface) {
- $module->bootstrap($app);
- }
- }
- }
- }
- public function setModule($id, $config)
- {
- $definitions = \Yii::$app->getModules();
- Yii::$app->setModule($id,
- ArrayHelper::merge($config, array_key_exists($id, $definitions) ? $definitions[$id] : [])
- );
- }
- }
|