backend/rf-article/adv/edit
根據(jù)歷史經(jīng)驗(yàn)链沼,此路由對(duì)應(yīng)的路徑應(yīng)該是 addons/RfArticle/backend/controllers/AdvController/actionEdit
但插件中并沒有這個(gè)文件
開啟斷點(diǎn)調(diào)試進(jìn)行跟蹤
定位到 vendor/yiisoft/yii2/base/Module.php line 522 行扩淀,這里創(chuàng)建了controller
$parts = $this->createController($route);
F7進(jìn)入方法內(nèi)部
該文件的586行 存在一個(gè) getModule($id)方法丐怯。進(jìn)入該方法
if (isset($this->_modules[$id])) {
if ($this->_modules[$id] instanceof self) {
return $this->_modules[$id];
} elseif ($load) {
Yii::debug("Loading module: $id", __METHOD__);
/* @var $module Module */
$module = Yii::createObject($this->_modules[$id], [$id, $this]);
$module->setInstance($module);
return $this->_modules[$id] = $module;
}
}
這里通過類的私有屬性_modules獲取module信息
跟蹤Module的私有變量如何生成
把該類里所有設(shè)置 _modules的方法都加上斷點(diǎn)崭歧。
跟蹤到文件 common/components/Init.php line 68
Yii::$app->setModules($this->getModulesByAddons());
跟蹤到參數(shù)調(diào)用的方法
這里獲取了所有已經(jīng)安裝的插件
if ($this->id == AppEnum::BACKEND && $addon['is_merchant_route_map'] == true) {
$app_id = $merchant;
}
第97行抡谐,判斷撞叽,如果是后臺(tái)季蚂,并且設(shè)置了數(shù)組中的 is-merchant_route_map為true時(shí),會(huì)替換app_id
也即將默認(rèn)的backend/controllers 替換為了 merchant/controllers
也即設(shè)置新插件時(shí)候的這一個(gè)選項(xiàng)作用

image.png