创建模块“论坛” - 完全如写here。然后创建嵌套模块“管理员”:
//"Module.php" in '@app/modules/forum'
namespace app\modules\forum;
class Module extends \yii\base\Module {
public function init() {
parent::init();
\Yii::configure($this, require(__DIR__ . '/config.php'));
$this->modules = [
'admin' => [
// here is my nested module
'class' => 'app\modules\forum\modules\admin\Module',
],
];
}
}
还创建了一个非嵌套模块“游戏”(以同样的方式),并在“web.php”(主配置文件中写道: ):
'modules' => [
'forum' => [
'class' => 'app\modules\forum\Module',
],
'games' => [
'class' => 'app\modules\games\Module',
],
'admin' => [
'class' => 'app\modules\forum\modules\admin\Module',
],
],
但是,当我试图输出:
// codeline is written in application view, not in module view
var_dump(array_keys(\Yii::$app->loadedModules));
我看到只有这些模块:
array(4) {
string(19) "yii\web\Application"
string(16) "yii\debug\Module"
string(14) "yii\gii\Module"
string(24) "app\modules\forum\Module"
}
“游戏”和嵌套“管理员”模块是不存在的!虽然doc说:
$ loadedModules财产不断加载的模块列表,包括直接儿童和嵌套那些,通过他们的类名索引。
但我只能得到“论坛”自己创建的模块。我是什么理解错误?
谢谢!我注意到,'$ loadedModules'将包含**不完全只有在'$ bootstrap'配置属性中设置的**模块。如果你注意到了,在'contact'页面中,我也看到了_app \ modules \ forum \ Module_,它不在引导程序中。这是因为为了实验的目的,我在'contact'视图中调用了'\ Yii :: $ app-> getModule('forum');'因此我通过getModule()方法加载了**一个模块 - 'forum' 。我添加了'\ Yii :: $ app-> getModule('forum') - > getModule('admin');' - 'admin'模块现在也存在于'$ loadedModules'!与“游戏”模块相同的情况。 Yii2初学者的意外行为) –
是的,当你调用'\ Yii :: $ app-> getModule();'该模块将出现在'$ loadedModules'中 – Tony