Сначала разработать и подготовить все доступные модули. В файле 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, которые подключаются к другим модулям, наверное без правки кода не получится.