Как добавить модули в систему на YII2 через админку?

Прошу поделиться опытом,
интересует технология, по которой к системе на Yii2 через админку можно было бы подключать разные модули этой системы при необходимости.
То есть наверно нужен какой то скрипт, который бы прописывал в нужные файлы нужную информацию по модулю или система сама бы каким-то чудным образом увидела появившийся модуль и начала с ним работать?
Спасибо!
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
Сначала разработать и подготовить все доступные модули. В файле main.php/main-local.php (или в другом месте предполагаемого подключения модулей) вписать это:
$modules = require('/path/to/modules/file.php');
// и далее
return [
  'modules' => array_merge($modules, [
    'user'  => [
      'class' => common\modules\user\Module::className(),
    ],
  ]),
];

Создать табличку в базе, где будут хранится все модули. Через CRUD создать функционал по изменению статусов модулей. Рядом с GridView создать кнопочку, по нажатию на которую из всех активных модулей будет генерироваться файл '/path/to/modules/file.php' примерно следующего содержания:
return [
            'questions'  => [
                'class' => common\modules\poll\questions\Module::className(),
            ],
            'answers'    => [
                'class' => common\modules\poll\answers\Module::className(),
            ],
            'news'       => [
                'class' => common\modules\news\Module::className(),
            ],
            'tags'       => [
                'class' => common\modules\tags\Module::className(),
            ],
            'categories' => [
                'class' => common\modules\categories\Module::className(),
            ],
            'images'     => [
                'class' => common\modules\images\Module::className(),
            ],
            'uploader'   => [
                'class' => common\modules\uploader\Module::className(),
            ],
            'content'    => [
                'class' => common\modules\content\Module::className(),
            ],
            'employees'  => [
                'class' => common\modules\employees\Module::className(),
            ],
            'comments'   => [
                'class' => common\modules\comments\Module::className(),
            ],
];

В принципе как бы и всё. Только от ошибок тут не застрахуешься, потому как один модуль нередко работает с другим в паре. Например, отдельно стоящие модули - статьи, блоги, новости, погода - таким макаром подключить можно, но какие-нибудь Comments, которые подключаются к другим модулям, наверное без правки кода не получится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы