rf-article 插件路由跟踪

backend/rf-article/adv/edit
根据历史经验,此路由对应的路径应该是 addons/RfArticle/backend/controllers/AdvController/actionEdit
但插件中并没有这个文件

开启断点调试进行跟踪
定位到 vendor/yiisoft/yii2/base/Module.php line 522 行,这里创建了controller

$parts = $this->createController($route);

F7进入方法内部
该文件的586行 存在一个 getModule($id)方法。进入该方法

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的私有变量如何生成

把该类里所有设置 _modules的方法都加上断点。
跟踪到文件 common/components/Init.php line 68

Yii::$app->setModules($this->getModulesByAddons());

跟踪到参数调用的方法
这里获取了所有已经安装的插件

if ($this->id == AppEnum::BACKEND && $addon['is_merchant_route_map'] == true) {
                $app_id = $merchant;
            }

第97行,判断,如果是后台,并且设置了数组中的 is-merchant_route_map为true时,会替换app_id
也即将默认的backend/controllers 替换为了 merchant/controllers
也即设置新插件时候的这一个选项作用


image.png

你可能感兴趣的:(rf-article 插件路由跟踪)