Сделал так:
1) Инициализация поведением всех модулей ( моих ), список всех ( моих ) модулей прописал в базе:
common\config\web.php
Код: Выделить всё
'components' => [
...
// Инициализация модулей, их роутингов и событий
'as initializer' => [
'class' => \common\behaviors\ModulesInitializerBehavior::class,
],
...
]
ModulesInitializerBehavior:
Код: Выделить всё
class ModulesInitializerBehavior extends Behavior
{
/** @inheritdoc */
public function events()
{
return [
Application::EVENT_BEFORE_REQUEST => 'beforeRequest',
];
}
public function beforeRequest()
{
$modules = Module::find()->all();
$this->enableModules($modules);
}
/**
* @param Module[] $modules
* @return array
*/
private function enableModules($modules)
{
$moduleConfig = $componentConfig =[];
foreach ($modules as $module) {
$this->enableModule($module->source);
$moduleConfig[$module->id] = [
'class' => $module->source,
];
if (!is_null($module->component_id)) {
$componentConfig[$module->component_id] = [
'class' => $module->component_source,
];
}
}
$this->owner->setModules($moduleConfig);
$this->owner->setComponents($componentConfig);
//var_dump($this->owner->getModules());exit;
}
private function enableModule($module)
{
$this->enableModuleUrlRules($module::getUrlRules());
//$this->enableModuleEventHandlers($version);
}
private function enableModuleUrlRules(array $url_rules)
{
$this->owner->getUrlManager()->addRules($url_rules, false);
}
}
2) Прописывание роутингов в самом модуле:
Module.php
Код: Выделить всё
/**
* article module definition class
*/
class Module extends \yii\base\Module
{
const EVENT_CREATE_ARTICLE = 'articles.create.article';
const EVENT_CREATE_ARTICLE_CONTENT = 'articles.create.article.content';
const EVENT_DELETE_ARTICLE = 'articles.delete.article';
const EVENT_UPDATE_ARTICLE_CONTENT = 'articles.update.article.content';
const EVENT_CHANGE_STATUS = 'articles.change_status.article';
const IS_ACTIVE = 1;
const NOT_ACTIVE = 0;
const VERSION = '0.1';
/** @var array The rules to be used in URL management. */
private static $urlRules = [
'articles/create' => 'articles/default/create',
'articles/update-content' => 'articles/default/update-content',
'articles/get-content-images' => 'articles/default/get-content-images',
'articles/update-article-status' => 'articles/default/update-article-status',
'articles/delete' => 'articles/default/delete',
'articles/upload-image-content' => 'articles/default/upload-image-content',
'articles/content-images-get' => 'articles/default/images-get',
'articles/create-article-content' => 'articles/default/create-article-content',
['pattern' => 'articles/<page:\d+>', 'route' => 'articles/default', 'defaults' => ['page' => 1]],
['pattern' => 'articles/<slug>', 'route' => 'articles/default/show-article'],
];
/**
* @inheritdoc
*/
public function init()
{
parent::init();
if (Yii::$app->id === 'backend') {
$this->controllerNamespace = 'common\modules\articles\backend\controllers';
} elseif (Yii::$app->id === 'frontend') {
$this->controllerNamespace = 'common\modules\articles\frontend\controllers';
} else {
$this->controllerNamespace = 'common\modules\articles\console\controllers';
}
}
public static function getUrlRules()
{
return static::$urlRules;
}
}